Android开发如果不懂设计模式,那么再深度研究就会困难重重,笔者深有体会,研究设计模式势在必行:
第一篇:观察者模式:
观察者模式定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并会自动更新。
观察者模式中主要有目标对象(被观察者)和观察者2个对象。
本文使用报社(目标对象)与读者(观察者)来形象替代以上2个对象,实现流程如下:
读者申请报社--->报社保留读者信息--->报社有新的报纸--->一起发送给多个读者--->读者得到新的报纸(数据更新)。
实现代码如下:
目标对象:
package com.hongri.observerpatterns; import java.util.ArrayList; import java.util.List; /** * 目标对象 * @author zhongyao */ public class Subject { //用来存储已申请报社的读者们 private List<Observer> readers = new ArrayList<Observer>(); //添加读者 public void attach(Observer reader){ readers.add(reader); } //删除读者 public void detach(Observer reader){ readers.remove(reader); } //通知所有读者有新的报纸信息(数据更新) protected void notifyObervers(){ for (Observer reader : readers) { reader.update(this); } } }
package com.hongri.observerpatterns; /** * 具体的目标实现 * @author zhongyao */ public class NewsPaper extends Subject { private String content; public String getContent() { return content; } public void setContent(String content) { this.content = content; notifyObervers(); } }
package com.hongri.observerpatterns; /** * 观察者 * @author zhongyao */ public interface Observer { public void update(Subject subject); }
观察者接口的具体实现类:
package com.hongri.observerpatterns; /** * 观察者实现 * * @author zhongyao */ public class Reader implements Observer { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void update(Subject subject) { System.out.println(name + "收到报纸了,阅读它。内容是===" + ((NewsPaper) subject).getContent()); } }
package com.hongri.main; import com.hongri.observerpatterns.NewsPaper; import com.hongri.observerpatterns.Reader; public class ObserverPClient { /** * (观察者模式)客户端 * @param args */ public static void main(String[] args) { //报社(被观察者) NewsPaper subject = new NewsPaper(); //读者(观察者) Reader reader1 = new Reader(); reader1.setName("张三"); Reader reader2 = new Reader(); reader2.setName("李四"); Reader reader3 = new Reader(); reader3.setName("王五"); Reader reader4 = new Reader(); reader4.setName("赵六"); //添加读者(观察者)到报社(目标对象) subject.attach(reader1); subject.attach(reader2); subject.attach(reader3); subject.attach(reader4); subject.setContent("本期内容是观察者模式..."); } }
原文地址:http://blog.csdn.net/u012440207/article/details/45668769