设计模式一

1.工厂模式

 

 

 

 特点:子类实现接口通过名称创建对象(实例化对象),返回值为接口。

优点:根据名字创建对象   

缺点:代码不是动态的,如果有新的类型,需要手动添加,增加了复杂度。

 

2.抽象工厂

 

 

 

 特点:工厂方法上再多一层,工厂类通过继承重写方法。工厂创造器可以通过名字获取工厂类型。

 

单例模式

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

关键代码:构造函数是私有的。

1、懒汉式,线程不安全

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

 

2、懒汉式,线程安全

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

3、饿汉式

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

4、双检锁/双重校验锁(DCL,即 double-checked locking)

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

5、登记式/静态内部类

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

6、枚举

 
public enum Singleton {  
    INSTANCE;  
    public void whateverMethod() {  
    }  
}

总结:

1.分清饿汉懒汉区别

2.双重检索可能造成的线程不安全优化顺序

3.难点主要在于双端检索的单例模式为了防止指令重排要加volatile关键字。

posted @ 2022-09-15 17:35  慧剑仙  阅读(19)  评论(0编辑  收藏  举报