桥接模式笔记(java)

桥接模式:是结构性模式,将抽象部分与它的实现部分分离。使它们可以独立的变化。抽象与实现分离并不是抽象类与派生类分离,实现指的是抽象类和它的派生类用来实现自己的对象。

对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

继承是强关联,聚合时弱关联。为了降低耦合性,桥接模式就是把继承关系变成聚合/组合关系。《大话设计模式》作者对桥接模式的理解是:实际系统可能有多种角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

桥接模式的参与者:抽象类(Abstraction),修正抽象类(RefinedAbstraction),实现类(Implementor),具体实现类(ConcreteImplementor)

抽象类(Abstraction):定义抽象类的接口,保存一个指向Implementor对象的引用。

修正抽象类(RefinedAbstraction):扩充Abstraction定义的接口。

实现类(Implementor):定义实现类的接口,该接口不一定与Abstraction的接口相同,实际上,这二个接口可以完全不同。Implementor只提供了基本操作,而Abstraction提供了基于这些基本操作的较高层次的操作。

具体实现类(ConcreteImplementor):实现Implementor,并定义它的具体实现。

Abstraction类:

abstract public class Abstraction{

protected Implementor implementor;

public void setImplementor(Implementor implementor){

this.implementor=implementor;

}

public void operation(){

implementor.operationImpl();

}

}

RefinedAbstraction类:

public class RefinedAbstraction extends Abstraction{

public void operation(){

//商业逻辑的修改

}

}

Implementor类:

abstract public class Implementor{

public abstract void operationImpl();

}

ConcreteImplementor类:

public class ConcreteImplementorA extends Implementor{

public abstract void operationImpl(){

//ConcreteImplementorA 的具体实现代码

}

}

public class ConcreteImplementorB extends Implementor{

public abstract void operationImpl(){

//ConcreteImplementorB的具体实现代码

}

}

客户端实现:

public static void main(String[] args){

Abstraction ab=new RefinedAbstraction();

ab.setImplementor(new ConcreteImplementorA());

ab.operation();

ab.setImplementor(new ConcreteImplementorB());

ab.operation();

}

在以下情况下使用桥接模式:

(1)你不希望在抽象和它的实现部分之间有一个固定的捆绑关系。例如这种情况可能是因为在程序运行时实现部分应可以被选择或替换。

(2)类的抽象和实现都可以通过生成子类来扩充,这是桥接模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

(3)一个抽象的实现部分的修改不影响客户端

(4)一个构件有多余一个抽象化角色和实现角色,系统需要对它们进行动态耦合。

(5)虽然系统使用继承是没问题,但是由于抽象化角色和具体角色需要独立变化,设计要求需要独立管理这二者。

他们不计后果的彼此拥抱,握紧双手,怕天会亮,怕爱会走。

桥接模式笔记(java)

相关文章:

你感兴趣的文章:

标签云: