架构师训练营第三周总结
设计模式
一种可重复使用的解决方案,每一种模式都描述了一种问题的通用解决方案,这种问题在我们的环境中,不停的出现。
分类
创建模式 - 对类的实例化过程的抽象
工厂模式
适合创建复杂对象,满足OCP
简单工厂(对Factory未实现OCP)-> 反射(类型安全问题,仍然知道具体实现,限制只能通过默认构造函数创建) -> 配置文件+默认实现(类型安全问题,限制只能通过默认构造函数创建)
单例模式
保证产生单一实例,两个原因:性能需求,功能需求
一定要有私有的构造函数,保证只能通过getInstance()方法获得
尽量将单例模式设计为无状态对象(只提供服务,不保存状态)
饿汉式 - 尽量使用
懒汉式 - 需要加锁
容器实现(HashMap) - Spring
结构模式 - 将类或者对象结合在一起形成更大的结构
适配器模式
系统需要使用现有的类,而这个类的接口与我们所需要的不同
应用: JDBC Driver、JDBC-ODBC Bridge
组合模式
树形结构
装饰器模式
在不改变客户端接口的前提下,扩展现有对象的功能
适配器是转换成另一个接口,而装饰器是保持接口不变
优点:
保持对象功能不变,扩展其外围功能
缺点:
可以自由组合带来更多复杂度,可能组合出荒谬的结果
应用:Servlet(XXXRequest、XXXRequestWrapper)、Collections.sychronizedList(list)、IO流(InputStream、OutputStream、Reader、Writer)
行为模式 - 对在不同的对象之间划分责任和算法的抽象化
模板模式
扩展功能的最基本模式之一,通过继承的方法实现扩展
形式:
抽象方法:强制子类覆盖
具体方法:选择性覆盖,有方法实现,可以选择不可覆盖final
钩子方法:选择性覆盖,空方法实现
策略模式
扩展功能的最基本模式之一,通过组合的方法实现扩展
系统需要在多种算法中选择一种
重构系统时,将条件语句转换成对于策略的多态性调用
优点:
使用策略的人与具体实现分离
策略对象可以自由组合
缺点:不关心何时使用何种算法,这个必须由客户端决定
版权声明: 本文为 InfoQ 作者【xs-geek】的原创文章。
原文链接:【http://xie.infoq.cn/article/953927c7a3d67f51b5e513683】。未经作者许可,禁止转载。
评论