[HITSC] 2021期末复习-第十一章(上)

CHAPTER 11(上) 面向可复用性和可维护性的设计模式

//这里均为博主自己复习过程中认为应当记录的点,部分细节不够详细之处欢迎一起讨论

摘要:创建模式;结构模式;行为模式;类/对象的联系与交互(粗粒度)

11.1 创建模式

11.1.1 Factory Method Pattern

--又称虚拟构造器,当希望client的代码中不指明创建哪个类时使用;通过定义一个用于创建对象的接口,将类的实例化延迟到子类。

--满足开闭原则OCP:对扩展开放,对已有代码的修改封闭。

--为包装工厂模式时,客户端行为如下,即面向接口编程,这与我们的初衷相悖;故为直接在程序中实例化具体实现类,需要在客户端与接口之间加入新的接口,客户通过形式化地调用该接口,来实例化一个具体实现类。

//客户直接实例化Trace接口的实现类

--使用工厂模式以后,客户端通过调用工厂方法(静态)间接实例化一个Trace的实现类,由log2可以发现,有点类似于为实例化Trace的过程增加了一层与用户间的交互,用户更像是输入命令(File,System)来调用Factory为其创建FileTrace/SystemTrace的实例。

--有新的产品加入时,在工厂类里修改或增删新的工厂函数即可,客户端代码无需修改。

//客户端代码示例

//工厂方法示例,由于是static,既可以构造单独工厂类,也可以在ADT里实现

11.1.2 优势

--无需将特定应用程序的类绑定到客户端代码。

--代码只处理产品接口,因此它可以与任何用户定义的具体产品(FileTrace、SystemTrace)一起使用

11.1.3 劣势

--需要额外创建工厂类作为Creator

--(这句PPT上已给出翻译,但理解起来仍有些吃力)如果客户端无论如何都必须对 Creator 进行子类化,这是可以接受的,但如果不是,则客户端必须处理另一个进化点。

11.2 结构模式

11.2.1 适配器模式 Adapter

11.2.1.1 结构示意

--整合两种接口;通过增加一个包装已实现子类的接口,实现子类的封装,客户端面向接口编程而隐藏具体子类细节;解决类接口不兼容问题,使得旧组件可用于新项目的开发。

--提高复用性。

--一个示例,Adapter类是作为已有接口实例类的子类来实现目标接口,实现类型的规约。这里客户端通过创建目的接口的适配器实例实现不兼容方法的调用。

--这里采用的是继承写法,还可以采用委托,即适配器不继承原有类,直接在自己的showHappiness方法中,委托原有类调用showSmile方法。

11.2.1.2 优势

11.2.1.3 劣势

--适配器模式的劣势在于更换适配器的实现过程复杂。

11.2.2 装饰器模式 Decorator

11.2.2.1 装饰器定义

--不改变现有对象结构,动态地、针对性地改动其中一部分方法,实现一些新增的职责,属于结构模式。

--使用场景:待修饰类被隐藏/final;功能需求是多种子功能的排列组合;继承关系难以实现(否则直接建个子类就好了)

--示例:Java I/O标准库

--结构示意如下:

--实现:建议构造装饰器抽象基类

--装饰器内部由委托实现,比继承更加灵活。

--使用时可嵌套声明。

11.2.2.2 优势

--功能的扩展比继承方式更加灵活,可根据需求任意嵌套,实现多方法的装饰或单方法的多轮装饰。

--通过装饰器的组合,得到多种不同行为的组合。

11.2.2.3 劣势

--子类数量多,不适合在需要大规模变更类的功能时使用

11.2.2.4 Decorator vs. Inheritance

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值