设计模式之-桥接模式

来源:互联网 发布:刘鑫 网络暴力 知乎 编辑:程序博客网 时间:2024/06/17 00:57

一、什么是桥接模式

Bridge 模式又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。


二、桥接模式的结构


三、桥接模式的角色和职责

Client
    Bridge模式的使用者

Abstraction
    抽象类接口(接口或抽象类)
    维护对行为实现(Implementor)的引用

Refined Abstraction
    Abstraction子类

Implementor
    行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)

ConcreteImplementor
    Implementor子类


代码实现:

Implementor类:

[java] view plain copy
  1. package com.qianyan.bridge;  
  2.   
  3. public interface Engine {  
  4.   
  5.     /** 
  6.      * 安装发动引擎 
  7.      */  
  8.     public void installEngine();  
  9. }  

ConcreteImplementor类:

[java] view plain copy
  1. package com.qianyan.bridge;  
  2.   
  3. public class Engine2000 implements Engine {  
  4.   
  5.     @Override  
  6.     public void installEngine() {  
  7.         System.out.println("安装2000CC发动引擎");  
  8.     }  
  9.   
  10. }  

[java] view plain copy
  1. package com.qianyan.bridge;  
  2.   
  3. public class Engine2200 implements Engine {  
  4.   
  5.     @Override  
  6.     public void installEngine() {  
  7.         System.out.println("安装2200CC发动引擎");  
  8.     }  
  9.   
  10. }  

Abstraction类:

[java] view plain copy
  1. package com.qianyan.bridge;  
  2.   
  3. public abstract class Car {  
  4.   
  5.     private Engine engine;  
  6.       
  7.     public Car(Engine engine) {  
  8.         this.engine = engine;  
  9.     }  
  10.   
  11.     public Engine getEngine() {  
  12.         return engine;  
  13.     }  
  14.   
  15.     public void setEngine(Engine engine) {  
  16.         this.engine = engine;  
  17.     }  
  18.       
  19.     public abstract void installEngine();  
  20. }  

Refined Abstraction类:

[java] view plain copy
  1. package com.qianyan.bridge;  
  2.   
  3. public class Bus extends Car {  
  4.   
  5.     public Bus(Engine engine) {  
  6.         super(engine);  
  7.     }  
  8.       
  9.     @Override  
  10.     public void installEngine() {  
  11.         System.out.print("Bus:");  
  12.         this.getEngine().installEngine();  
  13.     }  
  14.   
  15. }  

[java] view plain copy
  1. package com.qianyan.bridge;  
  2.   
  3. public class Jeep extends Car {  
  4.   
  5.     public Jeep(Engine engine) {  
  6.         super(engine);  
  7.     }  
  8.     @Override  
  9.     public void installEngine() {  
  10.         System.out.print("Jeep:");  
  11.         this.getEngine().installEngine();  
  12.     }  
  13.   
  14. }  

Client类:

[java] view plain copy
  1. package com.qianyan.bridge;  
  2.   
  3. public class MainClass {  
  4.     public static void main(String[] args) {  
  5.         Engine engine2000 = new Engine2000();  
  6.         Engine engine2200 = new Engine2200();  
  7.           
  8.         Car bus = new Bus(engine2000);  
  9.         bus.installEngine();  
  10.           
  11.         Car jeep = new Jeep(engine2200);  
  12.         jeep.installEngine();  
  13.     }  
  14. }  

Result:

[java] view plain copy
  1. Bus:安装2000CC发动引擎  
  2. Jeep:安装2200CC发动引擎  
0 0
原创粉丝点击