软件构造笔记 6.2 Design Patterns for Maintainability

1.创造模式

工厂方法模式:当客户端不知道要创建哪个具体类的实例,或者不想在客户端代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。

常规情况下,client直接创建具体对象:Product p = new ProductTwo();

在工厂方法模式下:Product p = new ConcreteTwo().makeObject();

抽象工厂模式:提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体类。


抽象工厂创建的不是一个完整产品,而是“产品族”(遵循固定搭配规则的多类产品实例),得到的结果是:多个不同产品的Object,各产品的创建过程对客户端可见,但“搭配”不能改变。本质上,抽象工厂是把多类产品的工厂模式组合在一起。

工厂模式创建一个对象,而抽象工厂创建了多个对象。抽象工厂使用组合/委派,而工厂模式使用继承/子类型

构造器模式:创建复杂对象,包含多个组成部分。



构造器模式创建的是一个完整的产品,有多个组成部分,客户端不需要了解每个部分是怎样创建、组合的,最终得到一个产品的完整Object。

构造器模式与模板模式相比,模板模式是为了复用算法的公共结构,而构造器是为了创建“复杂对象”,灵活扩展。

2.构设计模式

桥接模式:通过委派和继承来建立两个具体类之间的关系。


桥接模式强调双方运行时的链接。一个类A的对象中有其他类B的对象作为其组成部分,但A的对象具体绑定到B的哪个具体子类的实现,在运行时通过委派加以组合,并永久保存这种委派关系。

策略模式强调一方在运行时使用另一方的算法。“算法”通常实现为“类的某个方法”的形式,策略的目的并非在“调用算法的类”与“被调用算法所在的类”之间建立永久的联系,而只是帮助前者临时使用后者的算法。

代理模式:某个对象比较“私密”、“宝贵”,不希望被客户端直接访问,故采用代理模式,在二者之间建立防火墙。


适配器模式是为了消除不兼容,目的是B以客户端期望的统一方式与A建立起联系。代理模式是隔离对复杂对象的访问,减低代价,定位在“访问”。

组合模式目的是在同类型的对象间建立属性结构,一个上层对象可包含多个下层对象。

装饰模式强调同类型对象间“特征增加”的问题,它们之间是平等的,区别在于“特征”的数量,每次装饰只能作用于一个Object。

3.行为设计模式

观察模式:就像粉丝到偶像那里注册,偶像一旦有新闻发生,便推送给自己的粉丝。


访问模式:对特定类型的Object的特定操作,在运行时将二者动态绑定在一起,该操作可以灵活更改,无需更改被访问的类。本质上是将数据和作用于数据上的某些特定操作分离开来。


迭代器以遍历的方式访问集合数据而无需暴露其内部表示,即将遍历这些功能委派的代外部的迭代器对象。

访问模式在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是委派给访问对象,客户端可以灵活扩展访问的算法操作而不影响ADT

Mediator模式:多个对象间要进行交互,不是直接交互,而是通过mediator,实现消息的广播,从而将对象之间松散耦合,利于变化。


Mediator与Observer相比,Observe自己来广播,其他对象接受;而Mediator第三方中介复杂广播。

Command模式:将“指令”封装成对象,指令的所有细节对客户端隐藏,在指令内对具体的ADT发出动作。客户端希望执行指令,但不想知道指令的细节,也不想知道指令的具体作用对象。


Command模式将所有对客户端提供的指令与内部执行的ADT彻底分开,指令对外看了是“黑盒”。

职责链模式(Chain of responsibility):避免在请求方和各解决方之间的紧耦合,于是构造流水线,请求在其上传递,直到被处理为止。客户端只需在流水线的入口发出请求即可,请求自动在流水线上传递,直到被处理。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值