设计模式

1、单例模式

(1)使用静态内部类来维护单例的实现:

懒汉模式,同时实现延迟加载和线程安全。静态内部类只有在第一次被使用的时候才会初始化。内部类里的静态变量保证线程安全。

当getInstance()第一次被调用的时候,第一次读取SingletonFactory.instance,导致SingletonFactory被初始化;当这个内部类初始化的时候,会初始化它的静态域,从而创建instance实例,由于是静态域,因此只会被jvm在装载类的时候初始化一次,由jvm保证了它的线程安全。

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

(2)将创建类和getInstance()分开,单独为创建加synchronized关键字:

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

(3)使用枚举:

类构造器只能被一个线程在类加载的初始化阶段进行执行,所以枚举的每个实例在Java堆中有且只有一个副本。

public enum Singleton { INSTANCE;}

2、工厂模式

简单工厂模式:

public interface Sender{
    public void Send();
}

public class MailSender implements Sender{
    public void Send(){
        syso("mail sender");
    }
}
public class SmsSender implements Sender{
    public void send(){
        syso("sms sender");
    }
}

public class SendFactory{
    // 普通工厂模式
    public Sender produce(String type){
        if("mail".equals(type)){
            return new MailSender();
        }else if("sms".equals(type)){
            return new SmsSender();
        }
    }
    
    // 静态工厂方法模式
    public static Sender produceMail(){
        return new MailSender();
    }
    public static Sender produceSms(){
        return new SmsSender();
    }
    
}

抽象工厂模式:

public interface Sender{
    public void Send();
}
public interface Provider{
    public Sender produce();
}

public class MailSender implements Sender{
    public void Send(){
        syso("mail sender");
    }
}
public class SmsSender implements Sender{
    public void send(){
        syso("sms sender");
    }
}

public class SendMailFactory implements Provider{
    public Sender produce(){
        return new MailSender();
    }
}
public class SendSmsFactory implements Provider{
    public Sender produce(){
        return new SmsSender();
    }
}
原文地址:https://www.cnblogs.com/hesier/p/5640623.html