设计模式总结01–创建型模式

1 单例模式

1.1 设计意图

保证一个类只有一个实例、且提供一个全局的访问点。

1.2 解决问题

实现一个类的全局共享,避免全局使用的类的频繁创建和释放。

1.3 优缺点

优点

减小内存开销、避免重复创建;

缺点

  • 设计原则:没有继承、不能扩展
  • 子类膨胀:
  • 抽象水平:
  • 性能方面:
  • 代码可读:

2 普通工厂

分为简单工厂和工厂方法,前者工厂没有抽象接口。这里主要讲的工厂方法

2.1 设计意图

定义一个产品构建的工厂接口、让工厂实现类去实例化产品接口的具体实现类;

2.2 解决问题

解决单个接口的选择问题

2.3 优缺点

优点

隐藏产品子类信息、接口类型与构建分离;

缺点

  • 设计原则:
  • 子类膨胀:每加一个产品就需要添加一个工厂实现类。
  • 抽象水平:
  • 性能方面:
  • 代码可读:
  • 场景局限:

3 抽象工厂

3.1 设计意图

定义一套产品构建的工厂接口、让工厂实现类去实例化具体某套产品;

3.2 解决问题

解决一套接口的选择问题

3.3 优缺点

优点

隐藏产品子类信息、接口类型与构建分离、使用者不关心产品系列的选择细节;

缺点

  • 设计原则:当产品系列中类别有所改变,必然要修改工厂接口,违反开闭
  • 子类膨胀:每加一套产品就需要添加一个抽象工厂实现类,同样造成子类膨胀
  • 抽象水平:
  • 性能方面:
  • 代码可读:
  • 场景局限:

4 建造者

4.1 设计意图

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示;

4.2 解决问题

解决复杂对象由众多子对象组成,子对象的构建太复杂、用传统工厂很难细粒度把控

4.3 优缺点

优点

建造者独立和易扩展、外部不需要关心组装细节;

缺点

  • 设计原则:
  • 子类膨胀:如果对象组合子对象的方式众多、必然有众多的建造者子类产生
  • 抽象水平:
  • 性能方面:
  • 代码可读:
  • 场景局限:产品必须有组成的共性可提取,例如人由头、躯、四肢组成,但是生物种类繁多、不好抽象构建过程。

5 原型模式

5.1 设计意图

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象;

5.2 解决问题

在运行期建立和删除原型;
解决差异化太大的系列对象的构建过程;

5.3 优缺点

优点

性能高、不要关心具体子类构造函数;

缺点

  • 设计原则:每个类需要实现克隆接口,面对祖传代码就必须要修改现有类,违反开闭
  • 子类膨胀:
  • 抽象水平:
  • 性能方面:
  • 代码可读:
  • 场景局限:如果对象组合关系有相互持有、甚至环形持有,不好克隆

猜你喜欢

转载自blog.csdn.net/fs3296/article/details/108658174