Android[高级教程] 设计模式之五 观察者模式

今天我们来介绍一下观察者模式,观察者模式需要有目标对象,有观察对象。

目标对象的改变会通知观察对象也做出相应的变化。

接上一回的话题《西游记》,唐僧就是目标对象,他的三个徒弟就是保护他去西天取经的,所以他是三个徒弟的目标对象。那每一个徒弟就是观察对象,如果唐僧被妖怪抓去的话,徒弟们是要去救他的,不然没有唐僧,徒弟们去西天也是没用的,呵呵,我们来看一下具体的代码呢:

将唐僧设为目标者,将每个观察者注册给他,就是他如果出事的话,能通知到徒弟们去救他啊!

public class Tangseng {

	ArrayList<Person> lists;

	public Tangseng() {
		lists = new ArrayList<Person>();
	}

	public void register(Person p) {
		lists.add(p);
	}

	public void unRegister(Person p) {
		lists.remove(p);
	}

	public ArrayList<String> help() {

		ArrayList<String> arraylist = new ArrayList<String>();

		for (Person p : lists) {
			arraylist.add(p.save());
		}

		return arraylist;

	}

}
接下来就是三个徒弟类了,每个徒弟都有一个救师傅的方法, 这是悟空类:

public class Wukong implements Person {

	@Override
	public String getName() {

		return "孙悟空";
	}

	@Override
	public String save() {

		return this.getName() + "去救师傅了"; 
	}

}
八戒类:

public class Bajie implements Person {

	@Override
	public String getName() {

		return "八戒";
	}
	
	@Override
	public String save() {
		 
		return this.getName() + "去救师傅了"; 
	}

}
沙僧类:

public class Shaseng implements Person {

	@Override
	public String getName() {

		return "沙僧";
	}

	@Override
	public String save() {

		return this.getName() + "去救师傅了";
	}

}
师傅一喊救命,三个徒弟就会去救他,这里最后的实现类:

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);

		Tangseng tangseng = new Tangseng();
		tangseng.register(new Wukong());
		tangseng.register(new Bajie());
		tangseng.register(new Shaseng());

		ArrayList<String> lists = tangseng.help();

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, lists);

		listView.setAdapter(adapter);

	}
}
好了,看一下图吧


当然,我们也可以实现其他的方法,例如:唐僧说吃饭,那每个徒弟就吃饭,看一下改过的代码呢

Tangseng tangseng = new Tangseng();
		tangseng.register(new Wukong());
		tangseng.register(new Bajie());
		tangseng.register(new Shaseng());

		ArrayList<String> lists = tangseng.eat();
我们将唐僧的help改成eat方法

public ArrayList<String> eat() {

		arraylist = new ArrayList<String>();

		for (Person p : lists) {

			arraylist.add(p.eat());
		}

		return arraylist;

	}
然后每个徒弟实现了eat的方法,最后产生的效果如下:


好了,观察者模式这里就讲完了,有问题欢迎大家留言。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值