设计模式-单例模式
来源:互联网 发布:300036超图软件 股吧 编辑:程序博客网 时间:2024/06/05 14:12
单例模式又可分为恶汉式和懒汉式:
恶汉式实现方法:
package com.dx.demo;/** * 单例模式-恶汉模式 * @author xiangzi * */public class SingleDemo1 { private static SingleDemo1 single = new SingleDemo1(); //构造方法私有化 private SingleDemo1(){} //获取单例对象 public static SingleDemo1 getInstance(){ return single; } //其他方法 public void otherMetod(){ System.out.println("other methods ........"); }}package com.dx.demo;/** * 测试 * @author xiangzi * */public class MainTest { public static void main(String[] args) { SingleDemo1 single1 = SingleDemo1.getInstance(); SingleDemo1 single2 = SingleDemo1.getInstance(); System.out.println(single1 == single2); System.out.println("=============================="); single1.otherMetod(); }}
测试结果:
true==============================other methods ........
懒汉式实现:
package com.dx.demo;/** * 单例模式-懒汉模式 * * @author xiangzi * */public class SingleDemo2 { private static SingleDemo2 single = null; //构造方法私有化 private SingleDemo2(){} //获取单例对象 public static SingleDemo2 getInstance(){ //多线程下,利用synchronized解决同步问题 synchronized (SingleDemo2.class) { if(single == null){ single = new SingleDemo2(); } } return single; } //其他方法 public void otherMetod(){ System.out.println("other methods ........"); }}package com.dx.demo;/** * 测试 * @author xiangzi * */public class MainTest { public static void main(String[] args) { SingleDemo2 single1 = SingleDemo2.getInstance(); SingleDemo2 single2 = SingleDemo2.getInstance(); System.out.println(single1 == single2); System.out.println("=============================="); single1.otherMetod(); }}
测试结果:
true==============================other methods ........
总结:恶汉模式下,由于当前对象一旦被jvm加载,就会产生该类的实例(不管有用没用,先生成实例,所以是恶汉式),以后获取的都是统一对象,不会产生多线程下产生多个实例。而懒汉式由于只有该类被引用式,才会创建实例,所以需要解决多线程情况下的资源同步问题。
阅读全文
0 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- C/C++:libcurl smtp 邮件客户端(MUA)
- 5.OpenGL学习之纹理映射
- Windows右键在当前目录打开Cygwin终端
- 如何使用CSDN-markdown编辑器
- Java IO
- 设计模式-单例模式
- 显示jpg
- JQuery text(),html()
- 2017年美赛论文
- matlab语法(杂)
- 剑指offer 编程题(9):矩形覆盖
- 100 万在中国各省能活多久?
- 计算机视觉这一年:这是最全的一份CV技术报告
- Spring自定义@Qualifier注解