欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基础知识--------常用的设计模式之单例模式

程序员文章站 2022-06-17 17:59:56
...

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。

1995 年,GoF(Gang of Four,四人组/*)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。
 

基础知识--------常用的设计模式之单例模式

这 23 种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解。

当然,软件设计模式只是一个引导,在实际的软件开发中,必须根据具体的需求来选择:

  • 对于简单的程序,可能写一个简单的算法要比引入某种设计模式更加容易;
  • 但是对于大型项目开发或者框架设计,用设计模式来组织代码显然更好。

单例指的是单个实例,简单来说就是我在程序中有一个类,它没有必要或者不能在每次需要的时候就去new一个新的对象,我要求他在全局中只有唯一的实例就行。为了安全考虑,我们不能再将创建实例的权限交给其他类,所以我们需要在单例类内部创建一个私有的构造函数,以后需要获得单例实例则通过getInstance方法来获取。那此时我们就可以用单例来设计他,这里就有一个问题:我们在哪一个时间点去创建这个对象,根据new的时间点的不同,我们又可以将它分为懒汉式和饿汉式。

懒汉式:用到的时候创建实例

public class Singleton {  
   private static Singleton instance;  
   private Singleton (){}  
   public static synchronized Singleton getInstance() {//线程安全写法  
   if (instance == null) {  
       instance = new Singleton();  
   }  
   return instance;  
   }  
}

饿汉式:提前创建实例

public class Singleton {  
   private static Singleton instance = new Singleton();  
   private Singleton (){}  
   public static Singleton getInstance() {  
   return instance;  
   }  
}

静态内部类:创建一个内部静态类来实现单例

public class Singleton {  
   private static class SingletonHolder {  
   private static final Singleton INSTANCE = new Singleton();  
   }  
   private Singleton (){}  
   public static final Singleton getInstance() {  
   return SingletonHolder.INSTANCE;  
   }  
}

双重校验锁:强化线程安全

public class Singleton {  
   private volatile static Singleton singleton;  
   private Singleton (){}  
   public static Singleton getSingleton() {  
   if (singleton == null) {  
       synchronized (Singleton.class) {  
       if (singleton == null) {  
           singleton = new Singleton();  
       }  
       }  
   }  
   return singleton;  
   }  
}

 总结:单例模式的实现方法还是很多的,除上述的几种实现方式外还有枚举式,可以按照项目需求来进行选用,我一般采用的是饿汉式和静态内部类的方式