23种设计模式,分三大类,创建型、结构型、行为型。
创建型总共有 5 个,分两次记,第二次关注单例、原型和建造者。
- 2个工厂模式(factory),是在还没有工厂时,讨论如何开工厂(定义类),生产产品(产生类的对象)
- 单例模式(builder),有且仅有一个工厂
- 原型模式(Prototype),已经有了一个工厂,我们照葫芦画瓢再开一个工厂
- 建造者模式(builder),是在有有了工厂,讨论如何更好的开工生产产品
3、单例模式(Singleton)
单例模式:
- 有且仅有一个工厂
步骤:
-
使用 static 关键字,可被全局调用执行
public class Product{ private static Product instance; private Product(){} public static Product GetInstance(){ if (instance == null){ instance = new Product(); } return instance; } }
4、原型模式(Prototype)
原型模式:
产品已经被某个工厂生产出来,我们要照葫芦画瓢
步骤:
-
产品类实现 java.lang.Cloneable 接口,可被调用执行
public class Product implements java.lang.Cloneable{ protected Object clone() throws CloneNotSupportedException { return super.clone(); } }
5、建造者模式(Builder)
建造者:
- 产品已经被划分为多个零件,也有相应的工人会安装零件,指挥者按照特定顺序安排工人安装零件,提供产品给用户
- 用户只需找到 指挥者 和 工人 就可以获得产品,不必关心零件的安装细节
步骤:
-
定义产品类
public class Product { private String partC; private String partB; private String partA; public void setPart(String part){ } }
-
定义抽象建造类,描述零件的安装内容
public abstract class Builder{ abstract Product getProduct(); abstract void SetPartC; abstract void SetPartB; abstract void SetPartA; }
-
定义具体产品的建造类
public class Worker extends Builder{ private Product product = new Product(); public void SetPartC { product.setPart("A"); } public void SetPartB { product.setPart("B"); } public void SetPartA { product.setPart("C"); } }
-
定义指挥者类,描述这类产品的组装过程
public class Director { public Product build(Builder builder){ builder.SetPartA(); // 第一步 builder.SetPartB(); // 第二步 builder.SetPartC(); // 第三步 return builder.getProduct(); } }
-
指挥具体产品的建造类开始建造
public static void main(String[] args) { // 实例化 指挥者 Director director = new Director(); // 实例化 工人 Worker worker = new Worker(); // 指挥者 指挥 工厂 开始生产产品 Product build = director.build(worker); }