设计模式三(桥接模式、过滤器模式、组合模式)
设计模式
- 桥接模式
解决问题:使用继承实现抽象时可能导致类过多,桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。
优点:
1、分离抽象接口及其实现部分。提高了比继承更好的解决方案。
2、桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
3、实现细节对客户透明,可以对用户隐藏实现细节。
缺点:
1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
2、桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性
实现:
方案一:为每种形状都提供各种颜色的版本。
方案二:根据实际需要对颜色和形状进行组合。
- 过滤器模式
解决问题:使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
优点:
使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来
缺点:
类设置过于复杂
实现:
我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。
- 组合模式
解决问题:当一个对象包含多个对象组成时(如树状结构),为简便用户的操作,创建包含不同对象共同特征的基类。客户程序可以向处理简单对象一样来处理复合对象,从而使得客户程序与复杂元素的内部结构解耦。
优点:1、高层模块调用简单。 2、节点自由增加。
缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则
实现:
Component是管理共同特征的基类,leaf和composite表示文件和文件夹,既叶子节点和非叶子结点。通过Component可对leaf和composite组成的复杂对象进行简单操作。