标签:ar java for c on r ad new bs
package Observer;
public class Test {
/**
* 客户端测试类
* 观察者模式一般由四部分组成:
* 1抽象的被观察者(一般教材上都叫做“Subject(抽象的主题类)”),
* 里面一般定义了抽象的add(),remove(),notifyAll()等方法,
* 分别用于增加观察者,删除观察者,通知观察者自己的变化。
* 2具体的观察者类(一般教材上都叫做“ConcreteSubject(具体的主题类)”),
* 是抽象的被观察者(Subject)的具体的实现类,里面实现了add(),remove(),notifyAll()等方法;
* 3抽象的观察者类(一般教材上叫做“Observer”),里面一般定义了一个抽象的update()方法;
* 4具体的观察者类(一般教材上叫做“ConcreteObserver”),他是抽象的观察者类(Observer)的具体实现,它实现了update()方法,
* 用于接受被观察者的具体变化;
*
* 这里有个例子:有两个被观察者陈美嘉和胡一菲,他们分别有不同的观察者,陈美嘉的观察者有吕小布,
* 胡一菲的观察者有曾贤儿和张伟两个,当陈美嘉和胡一菲有什么变化时,马上就会分别被他们的观察者说知道;
* @author wl
*/
public static void main(String[] args) {
Watched HuYiFei=new ConcerteWatched();
Watched ChenMeiJia=new ConcerteWatched();
Watcher LvXiaoBu=new ConcreteWatcher("吕小布","陈美嘉");
Watcher ZengXianEr=new ConcreteWatcher("曾贤儿","胡一菲");
Watcher ZhangWei=new ConcreteWatcher("张伟","女神");
ChenMeiJia.addWatcher(LvXiaoBu);
HuYiFei.addWatcher(ZengXianEr);
HuYiFei.addWatcher(ZhangWei);
HuYiFei.notifyWatchers("好想看电影啊!!!");
ChenMeiJia.notifyWatchers("好想去旅游啊!!!");
}
}
package Observer;
/**
* 抽象的观察者接口类
* @author wl
*
*/
public interface Watcher {
void updata(String str);
}
package Observer;
/**
* 抽象的被观察者接口
* @author wl
*
*/
public interface Watched {
void addWatcher(Watcher watcher);
void removeWatcher(Watcher watcher);
void notifyWatchers(String str);
}
package Observer;
/**
* 具体的观察者类,比如例子中的吕小布,曾贤儿,张伟就是观察者的实例
* @author wl
*
*/
public class ConcreteWatcher implements Watcher {
String watcheredName;
String name;
public ConcreteWatcher(String name,String watcheredName){
this.name=name;
this.watcheredName=watcheredName;
}
@Override
public void updata(String str) {
System.out.println(name+"心里暗暗高兴“嘿嘿!!!机会来了,我的"+watcheredName+"说她 ‘"+str+"’”");
}
}
package Observer;
import java.util.ArrayList;
import java.util.List;
/**
* 具体的被观察者类,比如例子中的胡一菲,陈美嘉就是具体的被观察者的实例
* @author wl
*
*/
public class ConcerteWatched implements Watched {
List<Watcher> list=new ArrayList<Watcher>();
@Override
public void addWatcher(Watcher watcher) {
list.add(watcher);
}
@Override
public void removeWatcher(Watcher watcher) {
list.remove(watcher);
}
@Override
public void notifyWatchers(String str) {
for(Watcher watcher:list){
watcher.updata(str);
}
}
}
输出为:
曾贤儿心里暗暗高兴“嘿嘿!!!机会来了,我的胡一菲说她 ‘好想看电影啊!!!’”
张伟心里暗暗高兴“嘿嘿!!!机会来了,我的女神说她 ‘好想看电影啊!!!’”
吕小布心里暗暗高兴“嘿嘿!!!机会来了,我的陈美嘉说她 ‘好想去旅游啊!!!’”
标签:ar java for c on r ad new bs
原文地址:http://blog.csdn.net/tmwl0728/article/details/39736845