Android[進階教程] 設計模式之八 橋接模式

來源:互聯網
上載者:User

現在我們說一下橋接模式,打個比方,橋接模式就好比是小時候玩的搭積木一樣,每一塊積木都有自己的造型,但將它們組合起來可以實現不同的樣式。我們還是拿《西遊記》中的主角來解釋這個模式,悟空是用金箍棒,八戒是用九齒釘耙,沙僧是用降妖寶杖的,每個使的兵器都是不同的,我們先來看一下例圖吧:


好了,我們首先定義一個武器介面:

public interface Weapon{public String getWeapon();}

接著再定義了一個人的介面,這裡面就有使用武器的方法,這裡需要說清楚的是:人使用武器,而不是武器使用人,所以我們把介面類放在Person裡面:

public interface Person {public void setWeapon(Weapon weapon);}

介面定義好以後就是每個介面的具體實現方法了:

我們先來定義三種武器:

金箍棒

public class JinGuBang implements Weapon {private String weapon;public JinGuBang() {this.weapon = "金箍棒";}@Overridepublic String getWeapon() {return weapon;}}

九齒釘耙

public class JiuChiDingPa implements Weapon {private String weapon;public JiuChiDingPa() {this.weapon = "九齒釘耙";}@Overridepublic String getWeapon() {return weapon;}}

最後就是降妖寶仗

public class XiangYaoBaoZhang implements Weapon {private String weapon;public XiangYaoBaoZhang() {this.weapon = "降妖寶仗";}@Overridepublic String getWeapon() {return weapon;}}

三種武器定義好以後就是三個徒弟類的實現了:

public class Wukong implements Person {private String name;private Weapon weapon;public Wukong() {this.name = "悟空";}@Overridepublic void setWeapon(Weapon weapon) {this.weapon = weapon;}@Overridepublic String toString() {return name + "使用" + weapon.getWeapon();}}

這裡定義了悟空需要武器來打妖怪,但是哪種武器沒有具體說明,八戒和沙僧也是一樣的,這裡就不一一列出了,最後我們看一下Android中的實現:

public class XiyoujiActivity extends Activity {private ListView listView;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);listView = (ListView) findViewById(R.id.listView1);//三個徒弟類Person wukong = new Wukong();Person bajie = new Bajie();Person shasheng = new Shaseng();//三種武器類Weapon jinGuBang = new JinGuBang();Weapon jiuChiDingPa = new JiuChiDingPa();Weapon XiangYaoBaoZhang = new XiangYaoBaoZhang();//設定孫悟空的武器為"金箍棒"wukong.setWeapon(jinGuBang);//設定八戒的武器為"九齒釘耙"bajie.setWeapon(jiuChiDingPa);//設定沙僧的武器為"降妖寶杖"shasheng.setWeapon(XiangYaoBaoZhang);ArrayList<Person> persons = new ArrayList<Person>();persons.add(wukong);persons.add(bajie);persons.add(shasheng);ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this,android.R.layout.simple_list_item_1, persons);listView.setAdapter(adapter);}}

裡面的注釋寫得比較清楚了,大家應該能看明白,當然,你也可以給悟空其他武器用,OK,完成後的顯示效果如下:

同以前一樣,我們這裡也進行一下重構,因為具體類裡的變數跟方法都一樣,我們將Person方法改成抽像類,讓悟空,八戒,沙僧都繼承它,這樣,我們每個具體類裡只要設定名字就可以了,其他的就不需要我們再寫了,看一下改好的代碼:Person類

public abstract class Person {private String name;private Weapon weapon;public void setName(String name){this.name = name;}public void setWeapon(Weapon weapon){this.weapon = weapon;}@Overridepublic String toString() {return name + "使用" + weapon.getWeapon();}}

裡面就具體實現一些具體類要實現的方法,然後就是悟空,八戒和沙僧的類了,你看了一定嚇一跳了,它們分別只有一行代碼了:

public class Wukong extends Person {public Wukong() {this.setName("悟空");}}

就是每個人設定一下名字就行了,其他的都是依賴繼承去實現了,另兩個跟悟空一樣,也是設定一個名字就行了。最終的Activity就是上面的Activity,Activity裡面不需要修改任何代碼,最終實現也跟上面的圖一樣,這裡,我們就介紹了橋接模式,並對我們的代碼進行了重構。再次謝謝大家的關注。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.