1.一个简短的引论
1)模式概述:将抽象部分与实现部分分离。使它们都能够独立的变化。让抽象类和派生类各自实现自己的对象。当一个系统有多维度的变化时,将各个维度分离出来让它们独立于变化(多角度地分类实现对象),从而降低耦合。
它非常好的符合了OCP和优先使用对象,从而避免了仅仅用继承所造成的大量类的添加
2)核心:将抽象化(Abstraction)与实现化(Implementation)解耦。用组合/聚合关系取代继承
抽象化:将存在共性的多个实体当做一个实体对待。忽略多余信息
实现化:抽象化给出的详细实现
解耦:将存在于两个实体行为间的强关联去掉。即将抽象化和实现化之间的强关联变换为弱关联,达到解耦的目的。
2.UML与代码实现
1)结构:UML
结构:含有两个等级
抽象化等级结构:由抽象化角色和修正抽象化角色组成
实现化等级结构:由实现化角色和详细实现化角色组成
模式组成:
抽象化(Abstraction)角色:抽象化给出的定义,并保存一个队实现化对象的引用
修正抽象化(RefinedAbstraction)角色:苦熬站抽象化角色,改变和修正父类对抽象化的定义
实现化(Implementor)角色:给出实现化角色的接口,但不给出详细的实现。
详细实现化(ConcreteImplementor)角色:给出实现化角色接口的详细实现
(实现化角色仅仅给出底层操作,而抽象化角色仅仅给出基于底层操作的更高一层的操作。)
2)java代码
public class Bridge{ //client实现 public static void main(String[]args) { Abstraction ab = new RefinedAbstraction(); ab.SetImplementor(new ConcreteImplementorA()); ab.Operation(); ab.SetImplementor(new ConcreteImplementorB()); ab.Operation(); } } //Implementor类 abstract class Implementor { public abstract void Operation(); } //ConcreteImplementorA和ConcreteImplementorB等派生类 class ConcreteImplementorA extends Implementor { public void Operation() { System.out.println("详细实现A的方法运行"); } } class ConcreteImplementorB extends Implementor { public void Operation() { System.out.println("详细实现B的方法运行"); } } //Abstraction类 class Abstraction { protected Implementor implementor; public void SetImplementor(Implementor implementor) { this.implementor=implementor; } public void Operation() { implementor.Operation(); } } //RefinedAbstraction类 class RefinedAbstraction extends Abstraction { public void Operation() { implementor.Operation(); } }
3.长处
1)Bridge模式使对象间的组合关系解耦了抽象与实现之间固有的绑定关系。使得抽象和实现客运沿着各自的维度来变化
2)Bridge模式有时候类似于多继承方案,可是多继承往往违背单一职责原则,复用性较差。
它是比多继承方案更好的解决方法
3)一般用在两个很强的变化维度中,假设某个方向的变化维度并不强烈。则不一定要使用Bridge模式
4.应用
1)一个系统须要在构件的抽象化角色和详细化角色之间添加很多其它的灵活性。避免在两个层次间建立静态的联系
2)设计要求实现化角色的不论什么改变不影响client,即实现化角色的改变对client全然是透明的
3)一个构件有多余一个抽象化角色和实现化角色。系统须要他们之间进行动态耦合
4)系统中使用继承没有问题。可是抽象化角色和详细化角色须要独立变化,设计要求独立管理二者
5.其他相关模式
1)装饰模式:为了降低子类的数目,避免出现复杂的继承关系,有两种模式可供选用:桥接模式、装饰模式。
2)建造者模式:由对象的创建所带来的耦合性,能够用建造者模式解决,处理详细问题时可结合二者使用
小结
桥接模式把两个角色之间的继承关系改为聚合关系,从而使二者能够各自独立的变化。把原来在基类的实现化细节抽象出来,再构造到一个实现化的结构中。然后把原来的基类改造成一个抽象化的等级结构,这样就实现了系统在多个维度独立的变化
版权声明:本文博主原创文章,博客,未经同意不得转载。