設計模式(十五)——橋接模式
阿新 • • 發佈:2017-10-15
不用 java 高層 ext 部分 獨立 lib 類型 ray Implementor類型對象調用相應方法。
1.描述
將橋接部分與他的實現部分分離,是他們都可以獨立的變化。
2.模式的使用
·抽象(Abstraction):是一個抽象類,該抽象類含有Implementor的聲明,即維護一個Implementor類型對象。
·實現者(Implementor):實現者是一個接口或抽象類,該接口(抽象類)中的方法不定與Abstraction類中的方法一致。Implementor接口(抽象類)負責定義基本操作,而Abstraction類負責定義基於這些操作的較高層次操作。
·細化抽象(Refined Abstraction):細化抽象是抽象的一個一個子類,該子類重寫(覆蓋)抽象中的抽象方法時,再給出一些必要操作後,將委托所維護的
·具體實現者(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 publicabstract 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 }
大概就是這麽個意思,不運行了。
和策略模式思想相近。
設計模式(十五)——橋接模式