设计模式研读-1

推荐书籍:《研磨设计模式》

简单工厂

  1. 简单工厂创建物体的时候,需要客户端选择传入参数,说明客户端必须直到每个参数的意义,理解每个参数对应的功能。这要求一定程度上向客户端暴露内部实现。
  2. 每次给工厂增加一个实现类都需要修改工厂类的实现:Java/Python/Golang 的话可以通过配置文件修改,引入反射解决这个问题。也可以使用IoC/DI(控制反转/依赖注入)实现。
  3. 本质是选择实现。实现是具体的类做的,而不是简单工厂做的。能和其他创建具体对象实例的模式配合使用,如单例,原型。生成器模式。

优点

实现封装,解耦。

缺点

增加客户端复杂度

客户端需要理解参数意义。

不方便扩展子工厂

简单工厂的构造方法是静态的。不过通常不需要构造子简单工厂。

外观模式 Facade

比如代码生成工具,需要表现层,逻辑层,数据层。那么如果不用模式来实现,会需要单独创建这三个层,创建三次。而外观模式这样操作:打包这三者,客户端直接调用打包好的类创建即可。相当于这三个模块的外观界面,不需要知道模块内部实现细节,甚至不需要知道这三者的存在(比如卖电脑,打包成电脑之后客户端不需要知道有没有独显)。只需要和Facade类交互即可,解耦了客户端和这三个模块。

  1. 外观模式目的是外部减少和子系统内模块交互,降低耦合。不是添加新的接口。目的是组合已有功能来实现客户端需要,不是添加新功能。
  2. 部分开发者不需要了解内部各个模块细节了。
  3. 也可以跳过外观模式直接用模块。只是多了一个选项。
  4. 外观类可以是单例。

优点

解耦,不需要和子系统交互,只需要和外观交互。实现分层。

缺点

过多/不合理的外观模式让人不知道是用它还是直接用模块。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!