1.描述
将桥接部分与他的实现部分分离,是他们都可以独立的变化。
2.模式的使用
·抽象(Abstraction):是一个抽象类,该抽象类含有Implementor的声明,即维护一个Implementor类型对象。
·实现者(Implementor):实现者是一个接口或抽象类,该接口(抽象类)中的方法不定与Abstraction类中的方法一致。Implementor接口(抽象类)负责定义基本操作,而Abstraction类负责定义基于这些操作的较高层次操作。
·细化抽象(Refined Abstraction):细化抽象是抽象的一个一个子类,该子类重写(覆盖)抽象中的抽象方法时,再给出一些必要操作后,将委托所维护的Implementor类型对象调用相应方法。
·具体实现者(Concrete Implementor):具体实现者是实现(扩展)Implementor接口(抽象类)的类。
3.使用情景
·不想让抽象和某些重要的实现代码是固定的绑定关系,这部分实现可在运行时动态实现。
·抽象和实现者都可以继承的方式独立地扩展而不受影响,程序运行期间可能需要动态的将一个抽象子类的实例与一个实现者的子类实例进行组合。
·希望对实现者层次代码的修改对抽象层不产生影响,及即抽象层的代码不用重新编译,反之亦然。
4.优点
·桥接模式分离实现与抽象,使抽象和实现可以独立扩展。
·满足“开——闭”原则
5.UML图
6案例
中央电视台有CCTV5和CCTV6,一个负责制作体育节目,一个负责之多电影节目。使用桥接模式将抽象与实现分离。
1 package 桥接模式; 2 3 import java.util.ArrayList; 4 5 public class test1 { 6 7 public static void main(String[] args) { 8 9 } 10 11 } 12 13 /* 14 * 抽象 15 */ 16 abstract class CCTV{ 17 Program programMaker; 18 public abstract void makeProgram(); 19 } 20 21 /* 22 * 实现者 23 */ 24 interface Program{ 25 public ArrayList<String> makeTVProgram(); 26 } 27 28 /* 29 * 具体实现者 30 */ 31 class AthleticProgram implements Program{ 32 ArrayList<String> content; 33 AthleticProgram(){ 34 this.content = new ArrayList<String>(); 35 } 36 public ArrayList<String> makeTVProgram() { 37 content.clear(); 38 content.add("巴西足球比赛"); 39 content.add("比赛结束"); 40 return content; 41 } 42 43 } 44 45 /* 46 * 具体实现者 47 */ 48 class FilmProgram implements Program{ 49 ArrayList<String> content; 50 FilmProgram(){ 51 this.content = new ArrayList<String>(); 52 } 53 public ArrayList<String> makeTVProgram() { 54 content.clear(); 55 content.add("肖申克的救赎"); 56 return content; 57 } 58 59 } 60 61 /* 62 * 细化抽象 63 */ 64 class CCTV5 extends CCTV{ 65 ArrayList<String> content; 66 CCTV5(Program programMaker){ 67 this.programMaker = programMaker; 68 this.content = new ArrayList<String>(); 69 } 70 @Override 71 public void makeProgram() { 72 content = programMaker.makeTVProgram(); 73 74 } 75 76 }
大概就是这么个意思,不运行了。
和策略模式思想相近。