設(shè)計模式系列-橋接模式
橋接模式用于將抽象部分與它的實現(xiàn)部分分離,使他們可以獨立的變化。這句話不是很好理解,我來簡單翻譯一下,大概就是將一個事物的兩個維度的變化解耦開。
舉個例子
我們來看個毛筆和蠟筆的例子,假設(shè)我們需要大中小三種型號的畫筆,能夠繪制5種不同的顏色,如果使用蠟筆那么我們需要15只,如果使毛筆的話,我們只需要3只,外加5種顏料盒就OK。這里的關(guān)鍵點在于,毛筆可以做到將筆的型號和顏色解耦開,使他們可以獨立的變化,這就是橋接模式。
先來看一下UML圖:
再來看一下具體代碼如何實現(xiàn)。
- public interface Color {
- String draw();
- }
紅顏色
- public class RedColor implements Color {
- @Override
- public String draw() {
- return "紅色";
- }
- }
定義抽象的毛筆
- public abstract class BrushPen {
- //橋接畫筆和顏色
- protected Color color;
- public void setColor(Color color){
- this.color = color;
- }
- public abstract void operation();
- }
定義一個小號的毛筆
- public class SmallBrushPen extends BrushPen {
- @Override
- public void operation() {
- System.out.println(this.color.draw() + " 小號毛筆");
- }
- }
客戶端這樣使用橋接模式
- public class BridgeBrushPenDemo {
- public static void main(String[] args){
- BrushPen smallBrushPen = new SmallBrushPen();
- //紅色小號毛筆
- smallBrushPen.setColor(new RedColor());
- smallBrushPen.operation();
- //綠色小號毛筆
- smallBrushPen.setColor(new Green());
- smallBrushPen.operation();
- }
- }
總結(jié)
橋接模式是結(jié)構(gòu)型模式,當(dāng)事物涉及多個維度的變化時,使用橋接模式可以大大降低系統(tǒng)復(fù)雜度,這個模式也是我認(rèn)為的最難理解的一個設(shè)計模式。