设计模式(三)

七、工厂模式

定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例 化延迟到子类。 ——《设计模式》GoF

背景

实现一个导出数据的接口,让客户选择数据的导出方式;

要点

解决对象创建过程比较复杂,希望对外隐藏这些细节的场景;工厂封装了对象创建过程。

  • 比如连接池、线程池
  • 隐藏对象真实类型;
  • 对象创建会有很多参数来决定如何创建;
  • 创建对象有复杂的依赖关系;

本质

  • 将对创建对象的类型选择延迟到子类来选择实现;(实现不同的子类,在工厂中,封装创建对象的过程是不变的,对象的类型是变化的)

结构图

 

 八、抽象工厂

定义

提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。 ——《设计模式》GoF

工厂是处理一种对象,抽象工厂可以处理多种对象;抽象工厂是基于工厂的。

背景

实现一个拥有导出导入数据的接口,让客户选择数据的导出导入方式;

结构图

 

九、责任链

定义

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成 一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 ——《设计模式》GoF

场景

请求流程,1 天内需要主程序批准,3 天内需要项目经理批准,3 天以上需要老板批准;

要点

  • 解耦请求方和处理方,请求方不知道请求是如何被处理,处理方的组成是由相互独立的子处理构 成,子处理流程通过链表的方式连接,子处理请求可以按任意顺序组合;
  • 责任链请求强调请求最终由一个子处理流程处理;通过了各个子处理条件判断;
  • 责任链扩展就是功能链,功能链强调的是,一个请求依次经由功能链中的子处理流程处理;
  • 将职责以及职责顺序运行进行抽象,那么职责变化可以任意扩展,同时职责顺序也可以任意扩展;

责任链的稳定点是处理流程(处理需要走流程),变化点是链上的节点(节点的处理方式、处理权限)和节点顺序。

处理方存在一个递进关系,当前一个处理方无法处理该请求时,后一个处理方才需要知道该请求。

本质

  • 分离职责,动态组合;

结构图

十、装饰器

定义

动态地给一个对象增加一些额外的职责。就增加功能而言,装饰器模式比生产子类更为灵活。 —— 《设计模式》GoF

背景

普通员工有销售奖金,累计奖金,部门经理除此之外还有团队奖金;后面可能会添加环比增长奖 金,同时可能针对不同的职位产生不同的奖金组合;

 

要点

  • 通过采用组合而非继承的手法, 装饰器模式实现了在运行时动态扩展对象功能的能力,而且可以根 据需要扩展多个功能。 避免了使用继承带来的“灵活性差”和“多子类衍生问题”。
  • 不是解决“多子类衍生问题”问题,而是解决“父类在多个方向上的扩展功能”问题;
  • 装饰器模式把一系列复杂的功能分散到每个装饰器当中,一般一个装饰器只实现一个功能,实现复 用装饰器的功能;

 装饰器的表现形式跟责任链的功能链很相似,但是装饰器不强调顺序关系。

装饰器通过组合而非继承的方式来结合原本的物品,再装饰。

本质

  • 动态组合

结构图

 

------------------------------------------------------------------------------------------------------------------------

github:https://github.com/illusorycat/Design-patterns.git

 

posted @ 2022-03-03 01:26  幻cat  阅读(18)  评论(0编辑  收藏  举报