整理一下对设计模式的一些定位

Posted by 冷眼樵夫 on 04-10,2021

1. 把变化的部分都用组合、聚合或依赖实现,不变的部分用继承实现

Visitor模式, 将经常删减的操作中继承体系中提炼出来,成为操作类,每个类中的操作对应原有的不变的继承体系

Strategy模式,将可扩充的算法使用依赖实现;接口抽闲出来

Observer模式,将观察者放在被观察者的依赖列表中;不变的update部分使用继承实现,各个观察者各自实现update接口

Interpreter模式,将可变的解释算法使用依赖来应用,不变的算法接口使用继承实现

Command模式,将可变的Command类型用依赖实现,不变的Command接口用继承实现

2. 提炼公共的部分

模板方法,将公共的流程在父类中体现,具体各步骤在子类中实现

State模式,将公共的接口提炼出来

Memento模式,针对每个对象类,都有一个对应的记忆类,每个类实现各自的记忆类;再有统一的算法和管理器进行管理

Mediator模式,由他统一调度所有的下面的接口,接口由中介类封装

Iterator模式,将遍历接口和算法抽象出来

Fyiweight模式,将公共的部分放在基类中

Composite模式,将组合和递归在基类中实现

Singleton模式,将判断唯一放在static中实现

3. 在运行中可变

如State模式,相比原有的switch/case以数组map模式,此模式能够在运行时进行变更

如Strategy模式,通过依赖,可在运行中变更策略

decorator模式,在运行中决定新增功能(相对Proxy模式),通过继承来扩展不同的装饰

4. 解耦

Mediator模式,各个子模块之间无交互了, 多对多变成了1对多的模式; CC中的Task有中介者的意思

Observer和Subject解耦, 即Subject无需关心Observer是如何实现的,是再做什么

Iterator模式,将接口和遍历算法解耦

Command模式,将调用者和接收者解耦

Responsibility chain模式,将每一个执行的对象解耦,不需要关注最终的执行效果

Bridge模式,将接口扩展和实现扩展解耦;实现从其接口中解耦出来

5. 少改动进行扩充

Proxy模式, 接口保持不变,不变更原有类的情况下, 在原有的基础上,扩充新的功能

Adapter模式, 将现有系统和第三方系统很好的整合在一起,现有系统没做改动,第三方系统也没做改动

6. 降低使用难度

Facade模式,将多个对象的接口在一个对象中封装好,并提供出去,即调用者只和一个对象打交道

Mediator模式,将多个对象的交互在一个对象中管理,调用者只需要和Mediator打交道


0评论