Kendi的李尔设计模式-第1部分创建模式

每个想成为高级开发人员的初级开发人员,都必须从“设计模式”中学习,该模式是Erich Gamma,Richard Helm,Ralph Johnson i John Vlissides的经典著作。 我不得不承认,我从“设计模式”开始并不容易-毕竟,这是一本充实的抽象指南,也是您必须发展的如此抽象的思维方式。 幸运的是,在这个痛苦的过程中,我有一个同伴,我忠诚的黑人拉布拉多·肯迪(Labrador Kendi),每当我开始入睡时都会叫醒我。 我相信“实践能成为大师”,并且您应该始终以自己的语言来表达抽象以真正理解它。 而且,因为值得与他人分享-我们将与Kendi一起分享有关模式的知识。 那么谁愿意,让我们读…

首先-模式到底是什么? 它总是从问题开始,必须解决它。 有人找到优化的解决方案,可以在这种情况下使用。 因此,如果您知道该模式,则无需自己发明。 因此,正确识别问题的类型至关重要。 因此,我们将从案例分析开始讨论每种模式。

案号 1-我们要构建不同类型的复杂对象。 这些目的是一个制造过程的结果。 如何在不复制代码的情况下构建这些对象? 解决方案是使用“构建器”模式,其中复杂的对象创建算法独立于该对象的组件和组件的连接方式,并且构造过程允许创建不同类型的对象。

用例:如果我是狗屋生产的总监(干什么!),我会雇用一名首席建造者来创建狗屋项目。 反过来,这名建筑商会继承其他将完成此项目的建筑商,结果建造了不同类型的狗屋(一间小房子用于贝塞特犬,一间大房子用于拉布拉多犬)。

案号 2-我们希望能够在运行时添加和删除产品。 我们要避免创建与产品类层次结构相对应的工厂类层次结构。 解决方案是使用原型模式。

用例:我们发现狗屋的生产没有回报。 相反,我们购买现成的狗屋。 在订购时,客户会给我们提供首选项,例如“为该颜色绘画”或“在前面添加此标题”。 我们通过将原型克隆与客户的偏好相结合来动态创建新产品。

总结一下:

  • 创建模式有助于保持系统独立于对象创建,组成和表示的方式。 它们封装了系统使用哪些特定类的信息,并隐藏了创建和组成对象的过程。
  • 对复杂对象创建过程的最佳控制是生成器模式。 它会逐步生成产品,并且只有在过程完成后,导演才能从Builder中获取产品。 其他模式只需一步即可创建对象。
  • 工厂方法是一种流行的对象构造函数,当一个类想要将一个任务委托给其他一些辅助类时,该方法特别有用。
  • 工厂方法的缺点是创建了并行的类层次结构(产品类=构造函数类)。 因此,有时最好使用与工厂方法相反的原型模式,该模式通过克隆对象而不是创建新对象来减少类的数量。 此外,原型模式是唯一一种在运行时提供添加和删除产品功能的模式。
  • 本文还没有提到其他设计模式:抽象工厂和单例。