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里面不需要修改任何代码,最终实现也跟上面的图一样,这里,我们就介绍了桥接模式,并对我们的代码进行了重构。再次谢谢大家的关注。



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值