麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

設計模式——橋接模式(BridgeMode)

2019-11-10 20:21:42
字體:
來源:轉載
供稿:網友

要想正確理解設計模式,首先必須明確它是為了解決什么問題而提出來的。

設計模式學習筆記

——Shulin

轉載請注明出處:http://blog.csdn.net/zhshulin

橋接模式的定義:"將抽象部分與實現部分分離,使它們都可以獨立的變化"。

橋接模式是所有面向對象模式的基礎,通過對橋接模式的學習來理解設計模式的思想。理由如下:

1、它教導如何思考抽象,這是面向對象設計模式的關鍵概念。

2、它實現了基本的OOD原則。

3、它容易理解。

4、如果正確理解該模式,學習其他模式會很容易。

假設以下場景:

我們房間里有些電器(電燈,風扇等)。這些設備按照某些方式布局,并由開關控制。任何時候你都能替換或排查一個電器而不用碰到其他東西。例如,你可以換一個電燈而不需要換開關。同樣,你可以換一個開關或排查它而不需要碰到或替換相應的電燈或風扇;甚至你可以用把電燈連接到風扇的開關上,把風扇連到電燈的開關上,而不需要碰到開關。

當不同東西聯系在一起時,它們應該按照一定方式聯系:修改或替換一個系統時不會影響到另一個,或者說即便有,也應該最小化。這能夠讓你的系統易于管理,且成本低。

把電燈/風扇和開關聯系到一起的是電線和電器布局。我們可以它們看做不同系統間相互聯系的橋梁。其基本的思想是,一個事物不能和另一外一個事物直接聯系。它們應當通過某些橋梁或接口聯系在一起。用軟件術語來說,這叫“松耦合”。

例子中我們有開關,可能有幾種開關,如普通的開關,漂亮的開關,但通常來說它們還是開關,并且每種開關都能夠打開和關閉。

所以下面我們會有一個開關的父類Switch:

[java] view plain copy PRint?在CODE上查看代碼片public class Switch {                  public void On() {  }               public void Off(){  }     }   

接下來我們會有其他的具體的開關來繼承這個父類,他們都各自有自己的特征和行為,當然最基本的就是開、關,如:

[java] view%20plain copy print?public class FancySwitch extends Switch {      public void on(){          System.out.println("打開開關!!!!");      }      public void off(){          System.out.println("關閉開關!!!!");      }  }  [java] view%20plain copy print?public class NormalSwitch extends Switch {      public void on(){          System.out.println("打開開關!!!!");      }      public void off(){          System.out.println("關閉開關!!!!");      }        }  

對于電燈和電扇等具體的電器,根據OODP的開放閉合原則,我們知道只要可能,就應該嘗試抽象

跟開關不一樣,風扇和電燈等是兩種不同的事物。對于開關,我們能夠使用一個開關基類Switch,但風扇和電燈是兩個不同的事物,相比定義一個基類,接口可能更合適。一般來說,他們都是電器。所以我們可以定義一個接口,如IElectricalEqupublic interface IElectricalEquipment {      public void powerOn();  //每個電器都可以打開      public void powerOff(); //每個電器都可以關閉  }  

現在我們需要一座橋梁。在現實中,電線是橋梁。在我們對象設計中,開關知道如何打開和關閉電器,電器以某種方式聯系到開關。這里我們沒有電線,讓電器連接到開關的唯一方式是封裝。但開關不能直接知道風扇或電燈。開關應當知道一個電器IElectricalEquipment能夠打開或關閉。這意味著,Switch應該有一個IElectricalEquipment實例。

對風扇或電燈的封裝的實例是一個橋梁。所以讓我們修改Switch類以便封裝一個電器:

[java] view%20plain copy print?public class Switch {            public IElectricalEquipment iEquip;              public IElectricalEquipment getiEquip() {          return iEquip;      }      public void setiEquip(IElectricalEquipment iEquip) {          this.iEquip = iEquip;      }      public void On() {                //開關打開                }              public void Off() {                //開關關閉            }       }   

下面定義真實的電器:風扇和電燈,他們都實現了IElectricalEquipment接口。

電扇:

[java] view%20plain copy print?public class Fan implements IElectricalEquipment {      @Override      public void powerOn() {          System.out.println("打開電扇!");      }       @Override      public void powerOff() {          System.out.println("關閉電風扇!");      }  }  電燈:

[java] view%20plain copy print?public class Light implements IElectricalEquipment {            @Override      public void powerOn() {          System.out.println("打開電燈!");      }        @Override      public void powerOff() {          System.out.println("電燈關閉!");      }    }  

現在開關必須可以控制電器:

[java] view%20plain copy print?派生到我的代碼片public class BridgeModeDemo {        public static void main(String[] args) {          Switch fancySwitch = new FancySwitch(); //實例化漂亮的開關          Switch normalSwitch = new NormalSwitch();   //實例化普通開關          IElectricalEquipment fan = new Fan();   //實例化電風扇          IElectricalEquipment light = new Light();   //實例化電燈          normalSwitch.setiEquip(light);          fancySwitch.setiEquip(fan);          fancySwitch.getiEquip().powerOn();  //此時具體的開關和電扇連接起來了          normalSwitch.getiEquip().powerOn(); //打開電燈      }    }  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩美香港a一级毛片 | 成人在线视频精品 | 国产一级毛片在线看 | 少妇的肉体的满足毛片 | 免费一级欧美大片视频 | 国产18视频| 亚洲精品欧美二区三区中文字幕 | 毛片在线视频观看 | 亚洲福利在线视频 | 国产91一区二区三区 | 精品黑人一区二区三区国语馆 | 国产午夜精品理论片a级探花 | 成人免费网站在线观看视频 | av电影网站在线观看 | 久草在线综合 | 91经典视频| 日本网站在线看 | 成人黄色短视频在线观看 | 久操福利视频 | 成年片在线观看 | 一区二区免费看 | 亚洲视频在线网 | 欧美一级爱爱 | 欧美极品欧美精品欧美视频 | 久久久青青草 | 蜜桃精品视频在线观看 | 亚洲射情 | 老师你怎么会在这第2季出现 | 91精品国产网站 | 国产亚洲精品久久久久久网站 | 综合网天天色 | 黄色特级| 欧美三级欧美成人高清www | 国产精品一区二区三区在线播放 | 成码无人av片在线观看网站 | 国产亚洲精品久久久久久网站 | 亚洲国产一区二区三区 | 国产日产精品一区二区三区四区 | 国产精品久久亚洲 | 国产精品国产成人国产三级 | 欧美伦交 |