橋接模式就是對一個類的方法進行抽象化,吧不相關的因素提取出來,發展出第二個類 1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:橋接模式使用 6 * 意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化 7 * 適用性:你
橋接模式就是對一個類的方法進行抽象化,吧不相關的因素提取出來,發展出第二個類
1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:橋接模式使用 6 * 意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化 7 * 適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關係。 8 * 類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充 9 * 對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯 10 * 你想在多個對象間共用實現,但同時要求客戶並不知道這一點 11 * 時間:2016年2月17日下午7:45:10 12 * 作者:cutter_point 13 */ 14 public abstract class Systeml 15 { 16 //相應系統的軟體 17 protected Soft soft; 18 19 public abstract void using(); 20 21 public void installSoft(Soft soft) 22 { 23 this.soft = soft; 24 } 25 }
1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:橋接模式使用 6 * 意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化 7 * 適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關係。 8 * 類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充 9 * 對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯 10 * 你想在多個對象間共用實現,但同時要求客戶並不知道這一點 11 * 時間:2016年2月17日下午7:54:12 12 * 作者:cutter_point 13 */ 14 public class Window extends Systeml 15 { 16 //預設構造函數 17 public Window(){} 18 19 public Window(Soft soft) 20 { 21 //給系統安裝相應的軟體 22 this.soft = soft; 23 } 24 25 @Override 26 public void using() 27 { 28 System.out.print("Window 系統運行:"); 29 soft.run();//系統運行相應的軟體 30 } 31 32 }
1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:橋接模式使用 6 * 意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化 7 * 適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關係。 8 * 類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充 9 * 對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯 10 * 你想在多個對象間共用實現,但同時要求客戶並不知道這一點 11 * 時間:2016年2月17日下午7:57:12 12 * 作者:cutter_point 13 */ 14 public class Linux extends Systeml 15 { 16 //預設構造函數 17 public Linux(){} 18 19 public Linux(Soft soft) 20 { 21 //給系統安裝相應的軟體 22 this.soft = soft; 23 } 24 25 @Override 26 public void using() 27 { 28 System.out.print("Linux 系統運行:"); 29 soft.run();//系統運行相應的軟體 30 } 31 32 }
1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:橋接模式使用 6 * 意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化 7 * 適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關係。 8 * 類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充 9 * 對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯 10 * 你想在多個對象間共用實現,但同時要求客戶並不知道這一點 11 * 時間:2016年2月17日下午7:52:58 12 * 作者:cutter_point 13 */ 14 public interface Soft 15 { 16 public void run(); 17 }
1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:編譯器 6 * 時間:2016年2月17日下午7:58:17 7 * 作者:cutter_point 8 */ 9 public class Compiler implements Soft 10 { 11 12 @Override 13 public void run() 14 { 15 System.out.println("運行編譯器"); 16 } 17 18 }
1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:瀏覽器 6 * 時間:2016年2月17日下午8:00:09 7 * 作者:cutter_point 8 */ 9 public class Browser implements Soft 10 { 11 12 @Override 13 public void run() 14 { 15 System.out.println("運行瀏覽器"); 16 } 17 18 }
1 package com.shejimoshi.structural.Bridge; 2 3 4 /** 5 * 功能:測試橋接模式 6 * 時間:2016年2月17日下午8:06:05 7 * 作者:cutter_point 8 */ 9 public class Test 10 { 11 public static void main(String[] args) 12 { 13 //我們的軟體 14 Soft browser = new Browser(); 15 Soft compiler = new Compiler(); 16 17 //我們在window系統上安裝瀏覽器使用 18 Systeml win = new Window(); 19 win.installSoft(browser); 20 win.using(); 21 22 System.out.println("==============================="); 23 //Linux 上安裝瀏覽器還要編譯器 24 Systeml ubuntu = new Linux(browser); 25 ubuntu.using(); 26 ubuntu.installSoft(compiler); 27 ubuntu.using(); 28 29 } 30 }
測試結果:
Window 系統運行:運行瀏覽器 =============================== Linux 系統運行:運行瀏覽器 Linux 系統運行:運行編譯器