工厂模式
定义了一个床架对象的接口,但由子类决定实例化的类是哪一个,工厂方法让类的实例化推迟到子类中。
Pizza 案例
Pizza 店需要生产 Pizza,如果直接用 new 的方式,不利用扩展。我们要封装变化。
// 这样太“硬”编码了,不利用扩展Pizza pizza = new ItalyPizza();
简单工厂
简单工厂不是一种设计模式,更像是一种编程习惯。
// 简单工厂 示例public class SimplePizzaFactory {public Pizza createPizza(String type) {Pizza pizza = null;if (type.equals("")) {}else if (type.equals("")) {}else if (type.equals("")) {}return pizza;}}
工厂方法模式
工厂方法是抽象的,依赖子类来完成动作。必须返回一个产品。
abstract Product createProduct(String type);
工厂模式特点
- 封装变化,将变化的部分独立出来进行封装
- 不确定的推迟,利用多态,在不确定类的情况下,将类延迟到子类来决定具体的类
- 封装变化,延迟处理,使得代码扩展性很强
单例模式
确保一个类只有一个实例,并提供全局访问带你。
最简单的一种实现,存在多线程问题
public class Singleton {private static Singleton unqueInstance = null;public static Singleton getInstance() {if (unqueInstance == null) {return new Singleton();}return unqueInstance;}}
加 synchronized,存在性能问题
public class Singleton {private static Singleton unqueInstance = null;public static synchronized Singleton getInstance() {if (unqueInstance == null) {return new Singleton();}return unqueInstance;}}
饿汉式,存在浪费资源的问题
public class Singleton {private static Singleton uniqueInstance = new Singleton();public static Singleton getInstance() {return uniqueInstance;}}
懒汉式,双重锁检查
public class Singleton {private static volatile Singleton uniqueInstance = null;private Singleton() {}public static Singleton getInstance() {if (uniqueInstance == null) {synchronized (Singleton.class) {if (uniqueInstance == null) {uniqueInstance = new Singleton();}}}return uniqueInstance;}}
