桥接模式-Bridge

 

名称:

    桥接模式(Bridge Pattern)-对象结构型模式

 

问题:

    Bridge pattern decouples an abstraction from its implementation so that the two can vary independently.

    将抽象部分与它的实现部分分离,使它们都可以独立的变化。

 

适用性:

    -你不希望在抽象和它的实现部分之间有一个固定的绑定关系。在程序运行时刻实现部分应可以被选择或者切换。

    -类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对他们进行扩充。

    -对一个抽象的实现部分修改对客户不产生影响,即客户的代码不必重新编译。

    -你想对客户完全隐藏抽象的实现部分。

    -如果有许多类的生成,造成嵌套的普化。

    -想在多个对象间共享实现,但同时要求客户并不知道这一点。

 

协作:

    Abstraction将client的请求转发给它的Implementor对象。

 

优点和缺点:

    1、分离接口及其实现部分。有助于分层。

    2、提高可扩充性。可以独立的对Abstraction和Implementor层次结构进行扩充。

    3、实现细节对客户透明。

 

解决方案:

    

1、 模式的参与者

    1、Abstraction

    -定义抽象类的接口。

    -维护一个指向Implementor类型对象的指针。

    2、RefinedAbstraction

    -扩充由Abstraction定义的接口。

    3、Implementor

    -定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这俩个接口可以完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。

    4、ConcreteImplementor

    -实现Implementor接口并定义它的具体实现。

2.实现方式

interface Implementor
{
    public void OperationImpl();
}
class ConcreteImplementor implements Implementor
{
    public void OperationImpl()
    {
        
    }
}
abstract class Abstraction
{
   protected Implementor imple;
   protected Abstraction(Implementor imple)
   {
       this.imple=imple;
   }
   public abstract void Operation();   
}
class RefinedAbstraction extends Abstraction
{
   protected RefinedAbstraction(Implementor imple)
   {
       super(imple);
   }
   public void Operation()
   {
       imple.OperationImpl();
   }
}

 

参考资料

《设计模式:可复用面向对象软件的基础》

posted @ 2020-06-24 16:42  diameter  阅读(134)  评论(0编辑  收藏  举报