桥接模式
结构型模式
结构型模式(Structural Pattern)关注如何将现有类 或对象组织在一起形成更加强大的结构。不同的结构型模式从不同的角度组合类或对象,它们 在尽可能满足各种面向对象设计原则的同时为类或对象的组合提供一系列巧妙的解决方案
1.类结构型模式
关心类的组合,由多个类组合成一个更大的系统,在 类结构型模式中一般只存在继承关系和实现关系
2.对象结构型模式
关心类与对象的组合,通过关联关系,在一个类中定 义另一个类的实例对象,然后通过该对象调用相应的 方法
合成复用原则
合成复用原则(Composite Reuse Principle,CRP)又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP),其定义如下:尽量使用对象组合,而不是继承来达成目的。
合成复用原则就是指在一个新的对象里通过关联关 系(包括组合关系和聚合关系)来使用一些已有的 对象,使之成为新对象的一部分;新对象通过委派 调用已有对象的方法达到复用其已有功能的目的。 简言之:要尽量使用组合/聚合关系,少用继承。
在面向对象设计中,可以通过两种基本方法的环境中服用已有的师姐和实现,即通过组合/聚合关系或通过继承。
继承复用
实现简单,易于扩展。破坏系统的封装性;从基类 继承而来的实现是静态的,不可能在运行时发生改变,没有足 够的灵活性;只能在有限的环境中使用
又称为白箱复用
组合/聚合复用
:耦合度相对较低,选择性地调用成员对象的 操作;可以在运行时动态进行
又称为黑箱复用–推荐使用
组合/聚合可以使系统更加灵活,类与类之间的耦合度 降低,一个类的变化对其他类造成的影响相对较少, 因此一般首选使用组合/聚合来实现复用;其次才考虑 继承,在使用继承时,需要严格遵循里氏代换原则, 有效使用继承会有助于对问题的理解,降低复杂度, 而滥用继承反而会增加系统构建和维护的难度以及系 统的复杂度,因此需要慎重使用继承复用。
单一职责原则
一个对象应该质保还单一的职责,并且该职责被完整地封装在一个类中。
一个类承担的职责越多,他被复用的可能性越小。
桥接模式
桥接模式:将抽象部分与它的实现部分解耦,使得两者都 能够独立变化。
将类之间的静态继承关系转换为动态的对象组合关系。
桥接模式包含如下角色:
• Abstraction:抽象类
• RefinedAbstraction:扩充抽象类
• Implementor:实现类接口
• ConcreteImplementor:具体实现类
抽象类:不能实例化对象,其他类的功能都有,实例化必须通过子类继承,实例化子类
桥接模式UML图
理解桥接模式,重点需要理解如何将抽象(Abstraction)与实现 (Implementation)解耦,使得二者可以独立地变化
- 抽象:就是忽略一些信息,把不同的实体当作同样的实体对待。 在面向对象中,将对象的共同性质抽取出来形成类的过程即为抽 象的过程。
- 实现:就是针对抽象给出具体的实现,抽象与实现是一对互逆的 概念,实现产生的对象比抽象更具体,是对抽象事物的进一步具 体化的产物。
- 解耦:就是将抽象和实现之间的耦合解脱开,或者说是将它们之 间的强关联改换成弱关联,将两个角色之间的继承关系改为关联 关系。桥接模式中的所谓解耦,就是指在一个软件系统的抽象和 实现之间使用关联关系(组合或者聚合关系)而不是继承关系, 从而使两者可以相对独立地变化。
1.抽象类
public abstract class Abstraction{
protected Implementor impl;
public void setImpl(Implementor impl){
this.impl=impl;
}
public abstract void operation();
}
2.扩充抽象类
public class RefinedAbstraction extends Abstraction{
public void operation(){
//代码
impl.operationImpl();
//代码
}
3.接口
Interface Implementor{
public abstract void operation();
}
4.接口实现类
public Class ImplementorImpl implements Implementor{
public void operationImpl();
}