Android[高级教程] 设计模式之五 观察者模式
来源:互联网 发布:java获取字符串编码 编辑:程序博客网 时间:2024/05/21 09:47
今天我们来介绍一下观察者模式,观察者模式需要有目标对象,有观察对象。
目标对象的改变会通知观察对象也做出相应的变化。
接上一回的话题《西游记》,唐僧就是目标对象,他的三个徒弟就是保护他去西天取经的,所以他是三个徒弟的目标对象。那每一个徒弟就是观察对象,如果唐僧被妖怪抓去的话,徒弟们是要去救他的,不然没有唐僧,徒弟们去西天也是没用的,呵呵,我们来看一下具体的代码呢:
将唐僧设为目标者,将每个观察者注册给他,就是他如果出事的话,能通知到徒弟们去救他啊!
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 {@Overridepublic String getName() {return "孙悟空";}@Overridepublic String save() {return this.getName() + "去救师傅了"; }}八戒类:
public class Bajie implements Person {@Overridepublic String getName() {return "八戒";}@Overridepublic String save() { return this.getName() + "去救师傅了"; }}沙僧类:
public class Shaseng implements Person {@Overridepublic String getName() {return "沙僧";}@Overridepublic String save() {return this.getName() + "去救师傅了";}}师傅一喊救命,三个徒弟就会去救他,这里最后的实现类:
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);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的方法,最后产生的效果如下:
好了,观察者模式这里就讲完了,有问题欢迎大家留言。
- Android[高级教程] 设计模式之五 观察者模式
- 设计模式之五 观察者模式
- Java设计模式之五:观察者模式
- 【设计模式之五:观察者模式】观察者模式浅析
- Android[高级教程] 设计模式之二 策略模式
- Android[高级教程] 设计模式之三 原型模式
- Android[高级教程] 设计模式之四 适配器模式
- Android[高级教程] 设计模式之七 单例模式
- Android[高级教程] 设计模式之八 桥接模式
- Android[高级教程] 设计模式之九 命令模式
- 【设计模式】【五】观察者模式
- 【设计模式 五】观察者模式
- Android 设计模式 之 观察者模式
- Android 设计模式 之 观察者模式
- Android 设计模式之观察者模式
- Android 设计模式 之 观察者模式
- android 中的设计模式 之 观察者模式
- Android 设计模式 之 观察者模式
- YV12转换到RGB32[]
- Hadoop-0.12.2源代码:Configuration类
- 事务的隔离级别
- 840个日语惯用句型 学习笔记~110
- VLC代码初探
- Android[高级教程] 设计模式之五 观察者模式
- c++primer 2/28---string
- C++头文件的包含顺序研究
- “加一年减一天”与“减一年加一天”的区别
- flex as3 长时间执行一个任务
- Foundation框架中的数据类型
- 用C语言封装数据与方法
- solution about ADB server didn't ACK error
- Doxygen 使用说明