几种设计模式的使用场景
本周系统的学习了几种设计模式以及它们的使用场景:
工厂模式
适用场景:
为了实现解耦,将对象的创建和使用分开。
降低代码重复。
工厂模式将创建和使用分离,使用者不需要知道具体的创建过程,只需要使用即可。
单例模式
适用场景:
全局唯一实例,减少对象创建和销毁带来的开销。
当多个用户使用这个实例的时候,方便进行统一控制。
适配器模式
适用场景:系统需要现有的类,而这个类的接口与我们的所需要的不同。
模板方法模式
适用场景:
将一个大方法打破,变成多个可扩展的步骤。
将if/else或switch语句换成多态性。
存在的问题:
将抽象算法和具体步骤耦合在一起,不能独立演化。
造成类的数量很多、类的层次很深,例如:Spring的测试工具类。
策略模式
适用场景:系统需要在多种算法中选择一种
对比模板方法模式的优点:
将使用策略的人与策略的具体实现分离
策略对象可以自由组合
存在的问题:
策略模式仅仅封装了“算法的具体实现”,方便添加和替换算法。但它并不关心何时会用何种算法,这个必须由客户端来决定。
组合模式
是一种“对象的结构模式”。
装饰器模式
适用场景:
在不改变对客户端接口的前提下对客户端透明
扩展现有对象的功能
与模板方法,策略模式的比较:
1)装饰器保持原有对象的功能不变,扩展其外围功能。
2)模板方法和策略模式保持算法框架不变,而扩展其内部实现。
与继承比较:
1)都可以用例扩展对象的功能。
2)装饰器是动态的,继承是静态的。
3)装饰器可以任何组合,有可能组合出荒谬的结果。
评论