当前位置: 首页 > wzjs >正文

谁有网站备案号彩页设计模板免费

谁有网站备案号,彩页设计模板免费,wordpress 过滤,商城网站建设与维护方案1.单例模式介绍 1.1 简介 单例(Singleton)模式是一种创建型设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。 这在需要对某个资源进行集中管理或限制其实例化时非常有用,比如日志记录器、配置管理器或者连接池。 …

1.单例模式介绍

1.1 简介

单例(Singleton)模式是一种创建型设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。 这在需要对某个资源进行集中管理或限制其实例化时非常有用,比如日志记录器、配置管理器或者连接池。

可以将Singleton模式类比为一个总统职位。 在一个国家里,通常只能有一个总统,这个职位的独特性意味着不管你在哪里提到总统,都指的是同一个人。 这个职位的管理需要集中化,这样才能确保权力和决策的一致性。

1.1 实现要点:

  • 私有构造函数:阻止外部类直接实例化。
  • 静态实例:在类内部创建一个静态实例。
  • 公共静态方法:提供一个公共的静态方法来获取唯一的实例。

1.2 使用演示

step1. 新建单例类:

/*** 实现要点* - 私有构造函数:阻止外部类直接实例化。* - 静态实例:在类内部创建一个静态实例。* - 公共静态方法:提供一个公共的静态方法来获取唯一的实例。*/
public class Singleton {/*** 私有静态实例,确保唯一性*/private static Singleton instance;/*** 私有构造函数,防止外部实例化*/private Singleton() {}/*** 公共静态方法,提供全局访问点** @return Singleton*/public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}/*** 示例方法*/public void showMessage() {System.out.println("Hello, I am a Singleton!");}}

step2. 调用单例方法

public class SingletonDemo {public static void main(String[] args) {// 获取Singleton实例Singleton singleton = Singleton.getInstance();// 调用实例方法singleton.showMessage();}
}

2.单例实现方式

2.1 饿汉式

代码:

public class HungryStyleIdGenerator {/*** 在类加载的时候,instance静态实例就已经创建并初始化好了*/private static final HungryStyleIdGenerator INSTANCE = new HungryStyleIdGenerator();private final AtomicLong atomicLong = new AtomicLong(0);private HungryStyleIdGenerator() {}public static HungryStyleIdGenerator getInstance() {return INSTANCE;}public long getId() {return atomicLong.incrementAndGet();}
}

优点

  • 实现最简单
  • 线程绝对安全
  • 没有并发性能损耗

缺点

  • 非延迟加载(类加载时立即初始化)
  • 可能造成资源浪费

适用场景

  • 实例较小且使用频繁
  • 对内存敏感的系统中慎用

2.2 懒汉式

代码:

public class LazyStyleIdGenerator {private static LazyStyleIdGenerator INSTANCE;private final AtomicLong atomicLong = new AtomicLong(0);private LazyStyleIdGenerator() {}/*** 方法加了锁,导致这个函数的并发度很低(并发度为1)*/public static synchronized LazyStyleIdGenerator getInstance() {if (INSTANCE == null) {INSTANCE = new LazyStyleIdGenerator();}return INSTANCE;}public long getId() {return atomicLong.incrementAndGet();}
}

优点

  • 实现简单
  • 延迟加载(按需初始化)
  • 线程安全

缺点

  • 并发度低
  • 代码相对复杂

适用场景

  • 实例创建成本高且使用频率不确定时
  • 需要严格控制资源分配的场景

2.3 双重检测

代码:

public class DoubleCheckStyleIdGenerator {private static DoubleCheckStyleIdGenerator INSTANCE;private final AtomicLong atomicLong = new AtomicLong(0);private DoubleCheckStyleIdGenerator() {}/*** 只要instance被创建之后,即便再调用getInstance()函数也不会再进入到加锁逻辑中了。所以,这种实现方式解决了懒汉式并发度低的问题。*/public static DoubleCheckStyleIdGenerator getInstance() {if (INSTANCE == null) {synchronized (DoubleCheckStyleIdGenerator.class) {if (INSTANCE == null) {INSTANCE = new DoubleCheckStyleIdGenerator();}}}return INSTANCE;}public long getId() {return atomicLong.incrementAndGet();}
}

优点

  • 延迟加载
  • 高并发性能好
  • 内存占用优化

缺点

  • 实现复杂
  • 可读性较差

适用场景

  • 高并发系统中需要延迟加载
  • 对性能要求极高的场景

2.4 静态内部类

代码:

/*** instance的唯一性、创建过程的线程安全性,都由JVM来保证。** Java的类加载机制是线程安全的,具体由JVM保证:* - 当多个线程同时尝试访问一个未加载的类时,JVM会确保只由一个线程触发类的初始化,其他线程会等待。* - 类的初始化(包括静态代码块和静态变量赋值)是同步的,通过Class对象的锁(monitor)实现。
*/
public class StaticInnerClassStyleIdGenerator {private final AtomicLong atomicLong = new AtomicLong(0);private StaticInnerClassStyleIdGenerator() {}/*** 静态内部类,当外部类 StaticInnerClassStyleIdGenerator 被加载的时候,并不会创建SingletonHolder实例对象。* 只有当调用getInstance()方法时,SingletonHolder才会被加载,这个时候才会创建instance。*/private static class SingletonHolder {private static final StaticInnerClassStyleIdGenerator INSTANCE = new StaticInnerClassStyleIdGenerator();}public static StaticInnerClassStyleIdGenerator getInstance() {return SingletonHolder.INSTANCE;}public long getId() {return atomicLong.incrementAndGet();}
}

优点

  • 实现简单优雅
  • 延迟加载
  • 线程安全
  • 不需要额外同步代码

缺点

  • JVM类加载机制依赖

适用场景

  • 推荐作为默认实现方式
  • 适用于大多数单例需求场景

2.5 枚举

代码:

public enum EnumStyleIdGenerator {/*** 通过Java枚举类型本身的特性,保证了实例创建的线程安全性和实例的唯一性*/INSTANCE;private final AtomicLong atomicLong = new AtomicLong(0);public long getId() {return atomicLong.incrementAndGet();}
}

优点

  • 简洁优雅
  • 天然线程安全
  • 防止反序列化破坏
  • 防止反射攻击
  • 支持序列化

缺点

  • 不支持延迟初始化
  • 不符合传统单例模式结构

适用场景

  • 需要绝对线程安全的场景
  • 需要序列化的单例对象
  • 项目规范允许使用枚举时

2.6 单例的5种实现方式对比

实现方式延迟加载线程安全反射破坏序列化安全性能推荐度
饿汉式最高★★★☆
懒汉式中等★★☆
双重检查(DCL)★★★☆
静态内部类★★★★☆
枚举★★★★

使用建议:

  1. 优先选择:静态内部类实现(兼顾延迟加载和线程安全)
  2. 绝对安全:枚举方式(推荐用于金融、安全等关键系统)
  3. 特殊需求
    • 需要延迟初始化 + 高并发 → 双重检测DCL
    • 实例小且高频使用 → 饿汉式
    • 传统项目 → 懒汉式(注意同步)


文章转载自:

http://ToKuxEFX.knryp.cn
http://ONdFKJew.knryp.cn
http://xHqSlvh9.knryp.cn
http://QulKT5SK.knryp.cn
http://ZH7FrYud.knryp.cn
http://W9RHZRf2.knryp.cn
http://aaC7yrt1.knryp.cn
http://pFQoPWJI.knryp.cn
http://IQzu9umo.knryp.cn
http://fCiJnq3D.knryp.cn
http://4sqPNQH4.knryp.cn
http://rfpN8EJc.knryp.cn
http://xnWE9HiP.knryp.cn
http://iZC41Ze0.knryp.cn
http://XpBlgR6j.knryp.cn
http://8FgAzU0Y.knryp.cn
http://JFnmDM2R.knryp.cn
http://ElcrgdvC.knryp.cn
http://6aMReiOw.knryp.cn
http://CEqnovWp.knryp.cn
http://HFeq7L7g.knryp.cn
http://Uc7rfsML.knryp.cn
http://tSPT4lC1.knryp.cn
http://7XFR4xuZ.knryp.cn
http://oJinIUft.knryp.cn
http://xA5Xtua5.knryp.cn
http://YtTHgGxm.knryp.cn
http://ZnmOJXy3.knryp.cn
http://ei7r4wcq.knryp.cn
http://2wLVAX3B.knryp.cn
http://www.dtcms.com/wzjs/659115.html

相关文章:

  • 物流运输做网站的素材网站开发技术路线
  • 网站建设开发设计营销公司厦门保定网站维护公司
  • 营销型网站建设市场wordpress add post meta
  • 网站建设中搜索引擎的作用wordpress统计
  • 吴江网站优化手机免费建立网站吗
  • 深圳营销网站建设服务东莞保安公司哪家好
  • 视频素材网站大全免费建设网站平台合同范本
  • 哪个网站学习做辅助白色网站配色
  • 短租网站开发撰写网站建设策划书范文
  • 广州联雅网络科技有限公司上海seo关键字推广
  • 机械加工网站哪里找wordpress 顶部分类
  • 网站默认数据库地址好用的手机网站主页
  • 一个做网页的网站宁波网站开发建设
  • 平台网站制作公司wordpress 回复后查看
  • 中国工程建设标准化协会官方网站房地产开发公司网站源代码 墨绿色风格
  • 受欢迎的菏泽网站建设上海开本建设工程有限公司
  • 网站不备案可以做微信小程序么南京外贸网站建设公司
  • p2p网站建设 上海公司软文
  • 网站建设 橙做棋牌游戏网站犯法吗
  • 哪个网站可以做免费商业推广wordpress去掉评论框
  • 山东住房和城乡建设厅网站主页织梦做的的网站首页显示空白
  • 设计logo网站赚钱众创空间那个网站做的好
  • 娄底建设局网站企业网站如何上存
  • 湖南长沙招聘信息最新招聘2022上海网站seo策划
  • 网站开发需求方案微软公司做网站的软件
  • 哪个网站可以做专业兼职做微信的微网站费用多少
  • 网站特色友情链接外链
  • 珠海网站建设网络公司网站如何seo
  • seo优化官网太原seo代理商
  • 腾讯云 网站备案网站定制项目