原创

设计模式详解(一)--------单例模式

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

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

Gang of Four

这 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;  
   }  
}

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

 

 

正文到此结束
本文目录