设计模式分为三大类
创建型
工厂模式
简单工厂
- 只有唯一工厂(简单工厂),一个产品接口/抽象类,根据简单工厂中的静态方法来创建具体产品对象。适用于产品较少,几乎不扩展的情景
- 优点:简单工厂可以使客户端免除直接创建对象的职责,能够根据需要创建出对应的产品。实现客户端和产品类代码分离。
- 缺点:违背开闭原则,如果需要新增其他产品类,就必须在工厂类中新增
if-else
逻辑判断。但是整体来说,系统扩展还是相对其他工厂模式要困难。
工厂方法
- 工厂方法模式实际上是简单工厂模式的升级,工厂方法模式定义除了产品接口外,还定义了一个用于创建对象工厂的接口,让工厂子类再去实例化对应的产品类。它有多个工厂(抽象工厂+多个具体工厂),一个产品接口/抽象类,根据继承抽象工厂中的方法来多态创建具体产品对象。适用于一个类型的多个产品
- 优点:完全实现开闭原则,实现了可扩展和更复杂的层次结构。明确了职责,具有多态性,适用于任何实体类。
- 缺点:如果业务增加,会使得系统中类的个数成倍增加,提高了代码的复杂度
抽象工厂
-
有多个工厂(抽象工厂+多个具体工厂),多个产品接口/抽象类,对产品子类进行分组,根据继承抽象工厂中的方法多态创建同组的不同具体产品对象。适用于多个类型的多个产品
-
优点:增加分组比较容易,而且能大大减少工厂类的数量
-
缺点:因为分组,所以分组中的产品扩展就比较困难,比如再新增一个Product3,就需要改动
AbstractFactory
、FactoryA
和FactoryB
几乎所有工厂类
单例模式
- 保证一个类仅有一个实例,并提供一个访问它的全局访问点
建造者模式
原型模式
- 浅拷贝
- 深拷贝 序列化和反序列化 MemoryStream和BinaryFormatter