博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式(Singleton Pattern)
阅读量:4593 次
发布时间:2019-06-09

本文共 2064 字,大约阅读时间需要 6 分钟。

1.单例模式

  单例模式是程序设计模式中的一种。是为了保证整个应用中某个实例有且只有一个。

  应用场合:开发中有些对象只需要一个。

  特点:有且只有一个。

  单例模式分为两种:

  •   饿汉模式
  •   懒汉模式

2.饿汉模式

2.1创建饿汉单例模式

  1.创建类Singleton,在类中把构造函数设为私有的private,不允许外部调用

  2.在类中调用私有的构造方法,创建实例,并且用private static修饰

  3.提供一个可以获取实例的方法(getInstance()),加上public static修饰

1 public class Singleton { 2     //1.将构造方法私有化,不允许外部直接创建对象 3     private Singleton(){ 4     } 5     //2.自己在类的内部创建一个实例,是唯一的,把实例设为static,静态的 6     private static Singleton instance = new Singleton(); 7      8     //3.提供一个获取实例的方法 9     public static Singleton getInstance() {10         return instance;11     }12 }

 

2.2测试饿汉模式

  使用main方法测试,测试中调用2次getInstance(),比较2次的对象是否相等。

1 public class Test {2     public static void main(String[] args){3         //调用singleton的静态实例4         Singleton s1 = Singleton.getInstance();5         Singleton s2 = Singleton.getInstance();6         System.out.println(s1==s2); //相等,为饿汉单例模式7     }8 }

 

3.懒汉模式

3.1创建懒汉单例模式

  1.创建类Singleton,在类中把构造函数设为私有的private,不允许外部调用

  2.在类中调用私有的构造方法,声明一个唯一实例对象,并且用private static修饰

  3.提供一个可以获取实例的方法(getInstance()),加上public static修饰,并且通过 if 语句判断实例是否为空,为空则创建一个实例

 

1 public class Singleton2 { 2     //1.私有化构造方法 3     private Singleton2(){ 4  5     } 6     //2.声明类的唯一实例化对象,使用private static修饰 7     private static Singleton2 instance; 8  9     //3.提供一个获取实例对象的方法,用public static修饰10     public static Singleton2 getInstance(){11         //需要判断实例是否为空,为空则创建一个实例,否则返回实例12         if (instance == null) {13             instance = new Singleton2();14         }15         return instance;16     }17 }

 

3.2测试懒汉模式

   使用main方法测试,测试中调用2次getInstance(),比较2次的对象是否相等。

1 public class Test {2     public static void main(String[] args){3         //调用singleton2的静态实例4         Singleton2 s3 = Singleton2.getInstance();5         Singleton2 s4 = Singleton2.getInstance();6         System.out.println(s3==s4); //相等,为懒汉单例模式7     }8 }

 

4.区别

  1.饿汉模式,只要类加载了就会创建一个唯一的实例,而懒汉模式只是在类中声明一个唯一的对象实例,只有在第一次调用 getIntance() 方法时才会创建一个实例,后面再调用就就不会再创建实例了。

  2.饿汉模式的特点是加载类时比较慢,但是运行时获取对象的速度比较快,并且线程安全。

  3.懒汉模式的特点是加载类时比较快,但是运行时获取对象的速度比较慢,并且线程不安全。

 

转载于:https://www.cnblogs.com/zt19994/p/8127798.html

你可能感兴趣的文章
ADO.NET的记忆碎片(四)
查看>>
浏览器的渲染过程
查看>>
程序员面试准备
查看>>
Swift5.1 语言指南(十四) 下标
查看>>
2017-2018-1 20155330 《信息安全系统设计基础》加分项目--实现mypwd
查看>>
团队简介
查看>>
Oracle总结二
查看>>
Flask—03-bootstrap与表单
查看>>
五人分鱼问题
查看>>
Objective-C 锁
查看>>
Django-urls(路由系统)
查看>>
jsp c:forEach用法
查看>>
Derek解读Bytom源码-P2P网络 地址簿
查看>>
mac Vue基础
查看>>
诺基亚920内置地图PK苹果5地图
查看>>
Huffman编码
查看>>
.NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务
查看>>
iOS - CocoaPods使用傻瓜简版
查看>>
Jenkins-Restrict where the project can be run
查看>>
TabController定义顶部tab切换
查看>>