橋接模式是一種結構型設計模式。它經過使用封裝、聚合及繼承等行爲讓不一樣的類承擔不一樣的職責。它的主要特色是把抽象(Abstraction)與行爲實現(Implementation)分離開來,從而能夠保持各部分的獨立性以及應對他們的功能擴展。java
在學習的時候,看到了一個很不錯的例子,就拿來分享一下。編程
1.建立橋接實現接口設計模式
public interface DrawAPI { public void drawCircle(int radius, int x, int y); }
2.建立接口實現類ide
建立實現了 DrawAPI 接口的實體橋接實現類。學習
public class RedCircle implements DrawAPI { @Override public void drawCircle(int radius, int x, int y) { System.out.println("Drawing Circle[ color: red, radius: " + radius +", x: " +x+", "+ y +"]"); } }
public class GreenCircle implements DrawAPI { @Override public void drawCircle(int radius, int x, int y) { System.out.println("Drawing Circle[ color: green, radius: " + radius +", x: " +x+", "+ y +"]"); } }
3.建立橋接接口抽象類this
使用 DrawAPI 接口建立抽象類 Shape。設計
public abstract class Shape { protected DrawAPI drawAPI; protected Shape(DrawAPI drawAPI){ this.drawAPI = drawAPI; } public abstract void draw(); }
4.建立抽象類的實例code
建立實現了 Shape 接口的實體類。繼承
public class Circle extends Shape { private int x, y, radius; public Circle(int x, int y, int radius, DrawAPI drawAPI) { super(drawAPI); this.x = x; this.y = y; this.radius = radius; } public void draw() { drawAPI.drawCircle(radius,x,y); } }
5.使用接口
使用 Shape 和 DrawAPI 類畫出不一樣顏色的圓。
public class BridgePatternDemo { public static void main(String[] args) { Shape redCircle = new Circle(100,100, 10, new RedCircle()); Shape greenCircle = new Circle(100,100, 10, new GreenCircle()); redCircle.draw(); greenCircle.draw(); } }
(1)實現了抽象和實現部分的分離
橋接模式分離了抽象部分和實現部分,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,分別定義接口,這有助於系統進行分層設計,從而產生更好的結構化系統。對於系統的高層部分,只須要知道抽象部分和實現部分的接口就能夠了。
(2)更好的可擴展性
因爲橋接模式把抽象部分和實現部分分離了,從而分別定義接口,這就使得抽象部分和實現部分能夠分別獨立擴展,而不會相互影響,大大的提供了系統的可擴展性。
(3)可動態的切換實現
因爲橋接模式實現了抽象和實現的分離,因此在實現橋接模式時,就能夠實現動態的選擇和使用具體的實現。
(4)實現細節對客戶端透明,能夠對用戶隱藏實現細節。
(1)橋接模式的引入增長了系統的理解和設計難度,因爲聚合關聯關係創建在抽象層,要求開發者針對抽象進行設計和編程。
(2)橋接模式要求正確識別出系統中兩個獨立變化的維度,所以其使用範圍有必定的侷限性。