黑马程序员--单例模式
来源:互联网 发布:人工智能编程 编辑:程序博客网 时间:2024/06/05 22:39
什么叫单例模式
单例模式(Singleton)是一种常用的设计模式。单例模式,也叫单子模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为
单例模式特点
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
单例大致分为5种
1.懒汉式
2.恶汉式
3.静态内部类
4.枚举
5.双重校验锁
目前只知道懒汉式和恶汉式 所以只重点总结下这两个啦
这两种模式的步骤大致相同
1.私有本类的构造方法
2.创建本类对象
3.对外提供访问本类对象的功能
代码体现:
//恶汉式: 缺点没有达到Lazy loading的效果class Single{private static Single s = new Single();private Single(){}public static Single getInstance(){return s ;}}
//懒汉式 比较常用的写法class Single2{private Single2(){}private static Single2 instance = null;public static Single2 getInstance(){if (instance == null){instance = new Single2();}return instance ;}}
//测试类class SingleTest{public static void main(String[] args){Single s = Single.getInstance();Single s2 = Single.getInstance();System.out.println("s="+s);System.out.println("s2="+s2);System.out.println(s == s2);//不多说 肯定是true}}
这两种实现方式个人觉得懒汉式比较好点 其特点就是需要创建对象的时候才会有,而恶汉式是类一加载就会创建对象
下面再列举其他方式的代码体现
//双重校验锁,在当前的内存模型中无效class LockSingleton{ private volatile static LockSingleton singleton; private LockSingleton(){} public static LockSingleton getInstance(){ if(singleton==null){ synchronized(LockSingleton.class){ if(singleton==null){ singleton=new LockSingleton(); } } } return singleton; } }
//枚举, 优点: 不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象enum EnumSingleton{INSTANCE;public void doSomeThing(){}}
//静态内部类 优点: 加载是不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazyloading(这是啥)
class InternalSingleton{ private static class SingletonHolder{ private final static InternalSingleton INSTANCE=new InternalSingleton(); } private InternalSingleton(){} public static InternalSingleton getInstance(){ return SingletonHolder.INSTANCE; }}
0 0
- 黑马程序员-单例模式
- 黑马程序员--单例模式
- 黑马程序员-------单例模式
- 黑马程序员--单例模式
- 黑马程序员-单例模式
- 黑马程序员--单例模式
- 黑马程序员--单例模式
- 黑马程序员-单例模式
- 黑马程序员-单例模式
- 黑马程序员-单例模式
- 黑马程序员---单例模式
- 黑马程序员-----单例模式
- 黑马程序员_单例设计模式
- 黑马程序员_单例设计模式
- 黑马程序员 单例设计模式
- 黑马程序员_单例设计模式
- 黑马程序员_单例设计模式
- 黑马程序员_单例模式
- linux学习之使用heartbeat搭建高可用lvs集群服务
- java工程里CSS背景图片路径设置
- Linux NX 安装与配置 NoMachine
- target机挂载Linux主机NFS问题
- 【LeetCode】Single Number
- 黑马程序员--单例模式
- C语言编程需要注意的64位和32机器的区别
- AJAX兑现的二级级联菜单
- CSS实现网页背景渐变
- struts2 默认拦截器解析
- Adapter
- OS 如何为UIView设置大小适宜的背景图片
- 顺时针打印矩阵
- POJ 3259 Wormholes