2018-07-27

2018-07-27  本文已影响0人  hero万人王

设计模式——单例模式

定义:单例模式的类只允许存在一个该类的实例

实现思路 

1将该类的构造方法私有化,避免其他类调用其构造方法

2提供一个静态方法getInstance(),当调用getInstance时,判断该类实例是否存在。该类实例存在空则返回该实例,若不存在则创建一个实例并返回。

注意事项:多线程情况

饿汉式代码:

public class  Singleton{

  private  Singleton(){};

  private final static  Singleton  SINGLETON = new Singleton();

 //类装载时就完成了实例创建,避免了多线程的问题,但是也一直占用着内存。

  public static Singleton getInstance(){

                     return SINGLETON;

              }

}

懒汉式代码

public Singleton {

private static Singleton(){}

private  Singleton  singleton ;

public static getInstance(){

if(singleton==null){  singleton= new Singleton();}  //  多线程下不能够保证只产生一个实例

return singleton;}

}

双重检查法代码

public Singleton {

private Singleton (){}

private static volitel Singleton singleton =null;

public static Singleton getIstance(){

if(singleton==null){

synchronized(Singleton.class){

if(singleton==null) singleton=new Singleton();

}}return singleton;

}} // 只有singleton==null的情况才启用同步方法。提高了效率。

上一篇下一篇

猜你喜欢

热点阅读