java設計模式之橋樑模式(Bridge)

來源:互聯網
上載者:User

標籤:

1.橋樑模式 與 策略模式 非常相似

   (其實很多設計模式都相似,因為所有的模式都是按照設計原則 而設計出來的,設計原則就相當於武功的心法,設計模式就是招式,只要心法過硬,就可以無招勝有招了。)

   這裡也有比較詳細的說明 策略模式 VS 橋樑模式 (畫畫,使用蠟筆和使用毛筆以及顏料的區別)

   好了,這裡先說 橋樑模式,最後再總結兩者的區別

2.橋樑模式(還是那樣,設計模式就是為了代碼健壯,代碼重用,所以高內聚,低耦合永遠都是那麼受歡迎,什麼抽象類別啊,介面啊···)

   情境,農民施肥。

   這裡農民類 調用 肥料類,用的是組合的方式,也就是農民類中有一個成員屬性是肥料類類型的(就是這裡起到了橋樑的作用),

   為了可擴充性,農民類寫成抽象類別,肥料類則寫成介面;

   在施肥這個動作中,不僅肥料的種類會變,而且農民這邊也會改變,人工施肥,或者機器施肥等等,所以這裡又兩個可變因子。

   而且這兩個可變因子還可以隨機組合的,如 人工施 化肥,人工施有機肥;或者 機器人施化肥,機器人施有機肥。

   肥料介面 Manure:

1 package design.patterns.bridge2;2 /**3  * 肥料類4  * */5 public interface Manure {6     void manuring();7 }
View Code

  使用介面的原因很簡單,多態嘛

   有機肥類,動物肥類 AnimalManure:

 1 package design.patterns.bridge2; 2  3 public class AnimalManure implements Manure{ 4  5     @Override 6     public void manuring() { 7         System.out.println("==這是動物肥料,也就是翔····"); 8     } 9 10 }
View Code

  化肥類 ChemicalManure:

 1 package design.patterns.bridge2; 2  3 public class ChemicalManure implements Manure{ 4  5     @Override 6     public void manuring() { 7         System.out.println("==我是化肥···!"); 8     } 9 10 }
View Code

  然後到抽象類別 農民類 Farmer:

 1 package design.patterns.bridge2; 2 /** 3  * 農民類 4  * */ 5 public abstract class Farmer { 6     protected Manure manure; 7      8     public Farmer(Manure manure){ 9         this.manure = manure;10     }11     12     abstract void doManuring();13     14 }
View Code

  人類農民 HumanFarmer:

 1 package design.patterns.bridge2; 2  3 public class HumanFarmer extends Farmer{ 4      5     public HumanFarmer(Manure manure) { 6         super(manure); 7     } 8  9     @Override10     void doManuring() {11         System.out.println("我是大農民,我愛勞動");12         manure.manuring();13     }14 15 }
View Code

 當科技發達後,可能會有機器人來施肥的 RobotFarmer:

 1 package design.patterns.bridge2; 2  3 public class RobotFarmer extends Farmer{ 4  5     public RobotFarmer(Manure manure) { 6         super(manure); 7     } 8  9     @Override10     void doManuring() {11         System.out.println("機器人也可以施肥的哦。");12         manure.manuring();13     }14 15 }
View Code

  最後測試一下 Test類:

 1 package design.patterns.bridge2; 2  3 public class Test { 4     public static void main(String[] args){ 5         //開始施肥 6 //        //1.準備肥料 7 //        Manure manure = new AnimalManure(); 8         //4.突然想施化肥了, 9         Manure manure = new ChemicalManure();10         //2.人工施肥,施的是有機肥, 動物肥11         Farmer farmer = new HumanFarmer(manure);12 //        //5.人工施肥,的確較慢,以後會有機器人施肥的13 //        Farmer farmer = new RobotFarmer(manure);14         15         16         //3.開工17         work(farmer);18         19     }20     21     public static void work(Farmer farmer){22         farmer.doManuring();23     }24 }
View Code

 

  哎,真的慚愧,感覺我的例子說服力一般,如果理解不了,參考這裡 橋樑模式(Bridge)(不同平台備分不同格式的log檔案)

3.總結:

   Strategy(策略模式)是調用者不變,變的只是被調用的方法;(候選模式嘛)
   Bridge(橋樑模式)是 調用者和被調用者都可以改變。--可以看成策略模式的加強版(更加一步)

 

java設計模式之橋樑模式(Bridge)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.