单例设计模式
一、什么是设计模式?
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
(废话一大堆,简单来讲就是“套路”)
二、单例设计模式(Singleton):这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
(单例:单单一个实例,即类只允许存在一个对象实例)
三、怎么做?
(1)、私有化构造器
(2)、内部创建类的对象,要求此对象也必须声明为静态的
(3)、提供公共的静态方法,返回类的对象
①、懒汉式
/** * 懒汉式线程不安全写法 */ class Order{ //(1)、私有化构造器 private Order() { } //(2)、声明当前类的对象,没有初始化 private static Order instance=null; //(3)、提供公共的静态方法,返回类的对象 public static Order getInstance() { if(instance==null) { instance=new Order(); } return instance; } } /** * 懒汉式线程安全的写法 * */ class Customer{ //1.私有化构造器 private Customer() { } //2.声明当前类的对象,没有初始化 private static Customer instance=null; //3.提供公共的静态方法,返回类的对象 //方法一、效率低(使用同步方法) // public static synchronized Customer getInstance() // { // // if(instance==null) // { // instance=new Customer(); // } // return instance; // } //方法二、效率较高(使用同步代码块) public static Customer getInstance() { /*没有操作共享数据*/ if(instance==null) { synchronized (Customer.class) { /*在操作共享数据,if不可省略*/ if(instance==null) { instance=new Customer(); } } } return instance; } }
②、饿汉式
class Bank{ //1.私有化构造器 private Bank() { } //2.内部创建类的对象,要求此对象也必须声明为静态的 private static Bank instance=new Bank(); //3.提供公共的静态方法,返回类的对象 public static Bank getInstance() { return instance; } }
比较:
懒汉式:
好处:延时对象的创建
坏处:需要提供线程安全的写法
饿汉式:
好处:饿汉式是线程安全的
坏处:对象加载时间过程
一般使用懒汉式写法,需要注意线程安全问题
四、单例设计模式应用场景:
* 1.网站的计数器
* 2.应用程序的日志应用
* 3.数据库连接池
* 4.项目中,读取配置文件的类
* 5.Application也是单例典型的应用
* 6.Windows的Task Manager(任务管理器)就是很典型的单例模式
* 7.Windows的Recycle Bin(回收站)也是典型的单例应用