一、什么是桥接模式
Bridge 模式又叫做桥接模式,是构造型的设 计模式之一。Bridge模式基于类的最小设计原则,通过 使用封装,聚合以及继承等行为来让不同的类承担不同 的责任。它的主要特点是把抽象(abstraction)与行为 实现(implementation)分离开来,从而可以保持各部 分的独立性以及应对它们的功能扩展。
二、桥接模式的结构
三、桥接模式的角色和职责
Client
Bridge模式的使用者
Abstraction
抽象类接口(接口或抽象类)
维护对行为实现(Implementor)的引用
Refined Abstraction
Abstraction子类
Implementor
行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)
ConcreteImplementor
Implementor子类
eg1
公共汽车
1 //公共汽车 2 public abstract class Bus implements Car { 3 4 public abstract void installEngine();//安装引擎 5 }
公共汽车2000
1 //公共汽车2000 2 public class Bus2000 extends Bus{ 3 4 public void installEngine() { 5 System.out.println("给Bus安装2000cc发动机"); 6 } 7 }
公共汽车2200
1 //公共汽车2200 2 public class Bus2200 extends Bus { 3 4 public void installEngine() { 5 System.out.println("给Bus安装2200cc发动机"); 6 } 7 }
汽车
//汽车 public interface Car { public void installEngine();//安装引擎 }
Jeep车
1 //Jeep车 2 public abstract class Jeep implements Car { 3 4 public abstract void installEngine();//安装引擎 5 }
Jeep2000
1 //Jeep2000 2 public class Jeep2000 extends Jeep{ 3 4 public void installEngine() { 5 System.out.println("给Jeep安装2000cc发动机"); 6 } 7 }
Jeep2200
//Jeep2200 public class Jeep2200 extends Jeep { public void installEngine() { System.out.println("给Jeep安装2200cc发动机"); } }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Car car1 = new Bus2000(); 4 car1.installEngine();//安装引擎 5 } 6 }
==========================================================================================
eg2:
汽车
1 /* 2 * 汽车 3 */ 4 public interface Car { 5 6 public void install2000Engine();//安装2000引擎 7 8 public void install2200Engine(); 9 10 public void install2300Engine(); 11 }
公共汽车
1 public class Bus implements Car { 2 3 public void install2000Engine() { 4 System.out.println("给Bus安装2000cc发动机"); 5 } 6 7 public void install2200Engine() { 8 System.out.println("给Bus安装2200cc发动机"); 9 } 10 11 public void install2300Engine() { 12 System.out.println("给Bus安装2400cc发动机"); 13 } 14 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Car car1 = new Bus(); 4 car1.install2000Engine(); 5 } 6 }
==========================================================================
eg3:
发动机
1 //发动机 2 public interface Engine { 3 public void installEngine(); 4 }
2000发动机
1 public class Engine2000 implements Engine { 2 3 public void installEngine() { 4 System.out.println("安装2000cc发动机"); 5 } 6 }
2200发动机
1 public class Engine2200 implements Engine{ 2 3 public void installEngine() { 4 System.out.println("安装2200cc发动机"); 5 } 6 }
车
1 public abstract class Car { 2 private Engine engine; 3 4 public Car(Engine engine) { 5 this.engine = engine; 6 } 7 8 public Engine getEngine() { 9 return engine; 10 } 11 12 public void setEngine(Engine engine) { 13 this.engine = engine; 14 } 15 16 public abstract void installEngine(); 17 }
Jeep车
1 public class Jeep extends Car { 2 3 public Jeep(Engine engine) { 4 super(engine); 5 } 6 7 public void installEngine() { 8 System.out.print("Jeep:"); 9 this.getEngine().installEngine(); 10 } 11 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 4 Engine engine2000 = new Engine2000(); 5 Engine engine2200 = new Engine2200(); 6 7 Car car1 = new Bus(engine2000); 8 car1.installEngine(); 9 10 Car car2 = new Bus(engine2200); 11 car2.installEngine(); 12 13 Car jeep1 = new Jeep(engine2000); 14 jeep1.installEngine(); 15 16 Car jeep2 = new Jeep(engine2200); 17 jeep2.installEngine(); 18 19 } 20 }