Android[高级教程] 设计模式之八 桥接模式

现在我们说一下桥接模式,打个比方,桥接模式就好比是小时候玩的搭积木一样,每一块积木都有自己的造型,但将它们组合起来可以实现不同的样式。我们还是拿《西游记》中的主角来解释这个模式,悟空是用金箍棒,八戒是用九齿钉耙,沙僧是用降妖宝杖的,每个使的兵器都是不同的,我们先来看一下例图吧:


好了,我们首先定义一个武器接口:

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 = "金箍棒"; } @Override public String getWeapon() { return weapon; } } 九齿钉耙

public class JiuChiDingPa implements Weapon { private String weapon; public JiuChiDingPa() { this.weapon = "九齿钉耙"; } @Override public String getWeapon() { return weapon; } } 最后就是降妖宝仗

public class XiangYaoBaoZhang implements Weapon { private String weapon; public XiangYaoBaoZhang() { this.weapon = "降妖宝仗"; } @Override public String getWeapon() { return weapon; } } 三种武器定义好以后就是三个徒弟类的实现了:

public class Wukong implements Person { private String name; private Weapon weapon; public Wukong() { this.name = "悟空"; } @Override public void setWeapon(Weapon weapon) { this.weapon = weapon; } @Override public String toString() { return name + "使用" + weapon.getWeapon(); } } 这里定义了悟空需要武器来打妖怪,但是哪种武器没有具体说明,八戒和沙僧也是一样的,这里就不一一列出了,最后我们看一下Android中的实现:

public class XiyoujiActivity extends Activity { private ListView listView; /** Called when the activity is first created. */ @Override public 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; } @Override public String toString() { return name + "使用" + weapon.getWeapon(); } } 里面就具体实现一些具体类要实现的方法,然后就是悟空,八戒和沙僧的类了,你看了一定吓一跳了,它们分别只有一行代码了:

public class Wukong extends Person { public Wukong() { this.setName("悟空"); } } 就是每个人设置一下名字就行了,其他的都是依赖继承去实现了,另两个跟悟空一样,也是设置一个名字就行了。最终的Activity就是上面的Activity,Activity里面不需要修改任何代码,最终实现也跟上面的图一样,这里,我们就介绍了桥接模式,并对我们的代码进行了重构。再次谢谢大家的关注。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值