架构 - 面向对象的设计模式 - 总结
Date: 2020/6/24 V1.0
Author:Jessie
本文对本周架构师中面向对象的设计模式进行总结。
面向对象的设计模式
设计模式定义
设计模式是一种抽象出来的可重复使用的解决方案。
面向对象的目标:完成强内聚、低耦合。而这些原则,通过设计模式来落地。
分类:
1. 功能分类
l 创建模式:对类的实例化过程的抽象。
如:单例模式、创建工厂模式等。
l 结构模式:对类或对象组合在一起形成更大的结构。
如:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式。
l 行为模式:对在不同对象间划分责任和算法的抽象。
如:职责模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。
2. 方式分类:
类模式:以集成的方式,静态的。(一般不建议用)
对象模式:以组合方式实现模式的,动态的。
工厂模式
简单工厂模式,类似Spring IOC。
缺点:系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,同样破坏了“开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
单例模式
特点:一个类只产生一个实例。
为了解决如下需求:
l 性能需求:减少频繁实例创建销毁带来的消耗;
l 功能需求:多用户同时使用时,便于统一控制。
注意点:
避免产生多重实例,是需要有synchronized的修饰符。
举例:
适配器模式
特点:把某个对象已经实现方法,包装成另外一种对象/接口。以供调用者使用。
分类:类的适配器模式、对象的适配器模式。
l 不建议用的类的适配器模式,违反Liskov替换原则(子类不能比父类更严格);
l 最好用对象适配器模式,构造函数中中包含接口,所有方法对接口方法做适配。
参考代码:
模板方法模式
定位:它是扩展功能的基本模式。定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中。
可以通过:继承、组合分别实现。
模板方法的形式:
l 抽象方法:
通过抽象类,强制子类实现;
l 具体方法:
l 钩子方法:
空的实现,子类根据需要实现。
举例:JavaServlet中用到两个设计模式,如下:
1) GenericServlet 通过service()方法实现模板方法
2) 容器通过init()实现了模板方法。
策略模式
扩展功能的另一种模式。通过组合来实现扩展。
策略模式有三个角色:一个策略接口(抽象类)、策略实现、应用程序。
运行的是策略的实现。
组合模式
组合模式,是一种对象的结构模式,常用于:树形结构。
举例说明:
Test 接口
TestCase实现Test接口
TestSuite实现了Test,同时包含了Test、TestCase;直接runTest(),整个框架就会自动执行。
推荐书籍
仍然推荐:
思考帮助
架构师负责让架构合理,工程师依赖设计的框架、设计规范实现业务。
重点要理解不同模式设计背后的原理。
版权声明: 本文为 InfoQ 作者【架构5班杨娟Jessie】的原创文章。
原文链接:【http://xie.infoq.cn/article/b0ae9590e0a9d6aabdd70a206】。文章转载请联系作者。
评论