桥接模式(Bridge)

一、介绍

桥接模式的主要目的是要将类的抽象部分与它的实现分离,使各个不同类之间都能独立的变化和衔接。

 


二、实例

首先,定义一个抽象的基类,可以说这就是桥梁吧!

public abstract class Soda {     
   private SodaImp sodaImp;    
      
   public void setSodaImp(SodaImp sodaImp) {   
       this.sodaImp = sodaImp;   
   }   
   public SodaImp getSodaImp() {   
       return this.sodaImp;   
   }   
      
   public abstract void pourSoda();   
}


注意这个类中间封装了一个SodaImp的基本操作类,这个类的主要目的也就是通过它的新方法pourSoda()来对外转发SodaImp中的基本动作。

 

下面的一些个类相对来说要简单些了,都是用来基于已有的桥梁来添砖加瓦的。

//SodaImp抽象类或接口定义   
public abstract class SodaImp {     
   public abstract void pourSodaImp();   
}   
  
//实例化的Soda类(可以定义多个)   
public class MediumSoda extends Soda {     
   public MediumSoda() {   
   }   
      
   public void pourSoda() {   
       SodaImp sodaImp = this.getSodaImp();   
       for (int i = 0; i < 2; i++) {   
           System.out.print("...glug...");   
           sodaImp.pourSodaImp();   
       }   
       System.out.println(" ");   
   }   
}   
  
//实例化的SodaImp类(可以定义多个)   
public class CherrySodaImp extends SodaImp {   
   CherrySodaImp() {}   
       
   public void pourSodaImp() {   
       System.out.println("Yummy Cherry Soda!");   
   }   
}  

 

而实际调用的过程可以示例如下:

class TestBridge {   
   public static void testCherryPlatform() {   
       System.out.println(   
         "testing medium soda on the cherry platform");   
       MediumSoda mediumSoda = new MediumSoda();   
       mediumSoda.setSodaImp(new CherrySodaImp());   
       mediumSoda.pourSoda();    
   }   
       
   public static void main(String[] args) {   
        testCherryPlatform();   
        ...   
   }   
} 

 

 

三、分析

从以上的实例,我们大致可以总结出桥接模式的几个主要角色:

  • Abstraction 定义抽象类的接口,维护一个指向Implementor类型对象指针
  • RefinedAbstraction 由Abstraction定义的接口扩充和实例化
  • Implementor 定义实现类的接口,一般来讲,该接口仅提供基本的操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
  • ConcreteImplementor 实现Implementor接口并定义它的具体实现。

实现一个桥接模式,我们需要定义Abstraction的桥接抽象类,并注意在其中封装Implementor的实现,其他的应该都显而易懂。

 

作为一种设计模式,桥接模式的主要特点就是:
1、分离接口及其实现部分,这里实现了Abstraction和Implementor的分离,有助于降低对实现部分的依赖性,从而产生更好的结构化系统。
2、提高了可扩充性,可以独立的对Abstraction和Implementor层次结构进行扩充。

你可能感兴趣的:(设计模式)