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