工厂模式
普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
多个工厂模式,编写多个创建工厂的方法即可。
静态工厂模式,在多个工厂模式的基础上把Factory种方法的返回值标明位静态即可。
抽象工厂模式
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
抽象工厂模式和普通工厂模式不同的地方在于抽象工厂模式是创建多个工厂类且这些工厂都实现同一个借口Provide(借口中有方法produce()),而普通工厂模式中只有一个工厂类。
单例模式
单例模式中必须有三个东西:单例对象,编写的无参构造方法,用于返回单例对象的getInstance()方法。
单例模式的定义就是:“一个类有且仅有一个实例, 并且自行实例向整个系统提供”。
volatile的作用就是确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
不管使用的是哪种单例模式,里面的单例对象都是静态变量。
单例模式有三种编写方式。
较为正规的就是双重锁模式:
public class Singleton { private Singleton() { } private static volatile Singleton instance = null; public static Singleton getInstance() { if(instance == null) { synchronized(Singleton.class) { if(instance == null) { instance = new Singleton(); } } } return instance; } }
然后还有懒汉模式,懒汉模式是不需要使用双重锁的,性能较低,直接把锁加在方法上。
public class Singleton { private static Singleton instance = null; private Singleton() { } public static synchronized Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
饿汉模式,单例模式的创建更为简单。直接创建静态常量单例对象,不可以改变,连创建都省掉了。
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() { } public Singleton getInstance() { return instance; } }