架构师 0 期 | 面向对象的设计模式
设计模式的作用
使用设计模式的好处:运用各种设计原则,可以写出强内聚,低耦合的程序。
写出好用的框架,让开发人员依赖你的框架,按照你设计的规范开发。使程序变得可控,优美。
设计模式的定义
每种模式都是一种问题的通用解决方案。
设计模式是一种可重复使用的解决方案。
所以理论上不止23种,可能有几百上万种。
设计模式划分
按功能分
创建模式
对类的实例化过程的抽象。
结构模式
将类或者对象结合在一起形成更大的结构。
行为模式
对在不同的对象之间划分责任和算法的抽象化。
按方式分
类模式
以继承的方式实现的,静态的。
对象模式
以组合的方式实现的,动态的。
设计模式举例
工厂模式
单例模式
保证产生单一实例,一个类就产生一个实例。
提高性能,实现特殊功能方便控制。
适配器模式(Adapter)
需要使用一个类,但是这个类不太满足需求。需要拓展一下方法。
如图:
模板方式模式
是拓展功能最基本模式之一,是类的行为模式(种类一)
通过继承的方法实现扩展,
基类负责算法的轮廓和骨架
子类负责算法的具体实现
继承的方式更容易实现,相对于组合方式
模板方法的形式
抽象方法
强制子类实现(规定步骤,模板)
protected abstract void step1();
具体方法
可选方法(子类选择实现)
如果明确不需要覆盖的话,使用关键字final
protected void doSomething() {...}
钩子方法
空实现(缺省适配器模式),父类已经做了空实现
子类可选择覆盖,做子类想做的特殊事情。
protected void setup() {}
何时使用?
系统重构时:
多if、else 或 switch 换成多态(使用模板方法)
打方法打碎,变成多个可以拓展的步骤
策略模式(Strategy)
策略模式是拓展功能的最基本模式,是对象的行为模式(种类二)
通过组合的方式实现拓展的
何时使用?
需要再多种算法中选择一种时
系统重构时,将多if、else 或 switch 换成多态(使用策略模式)
对比(和模板方法)
策略对象可以自由组合
将使用策略的人和策略的具体实现分离
版权声明: 本文为 InfoQ 作者【刁架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/b57a93237b1c02d07a082b340】。文章转载请联系作者。
评论