简单,观察模式

直接上代码
java

package yct.com.watcher.test;
import yct.com.watcher.Watched;
import yct.com.watcher.impl.BoyWatched;
import yct.com.watcher.impl.BoyWatcher;
import yct.com.watcher.impl.GrilWatcher;
/**
 * 观察者模式测试类
 * @author 哥帅
 * weixin:YangCongTou8023
 */
public class WatcheTest {
public static void main(String[] args) {
//被观察者
Watched boyWatched=new BoyWatched();
//观察者
GrilWatcher  grilWatcher=new GrilWatcher();
//观察者
BoyWatcher boyWatcher=new BoyWatcher();
//添加观察者到被观察者的集合中
boyWatched.add(boyWatcher);
boyWatched.add(grilWatcher);
//被观察者通知观察者
boyWatched.notifyWatchers("                        我从泰国回来啦!");
}
}

打印结果:测试

BoyWatched:我是男的!code

                        我从泰国回来啦!接口

BoyWatcher:我还爱你。。rem

GrilWatcher:我也要去!class

---------------下面是具体代码test

定义一个被观察者接口,一个观察者接口
import

package yct.com.watcher;
/**
 * 观察者接口
 * @author 哥帅
 * weixin:YangCongTou8023
 */
public interface Watched {
//可添加观察者
public void add(Watcher watcher);
//可删除观察者
public void delete(Watcher watcher);
//通知观察者
public void notifyWatchers(String msg);
}
package yct.com.watcher;
/**
 * 观察者接口
 * @author 哥帅
 */
public interface Watcher {
//要执行的动做
public void update();
}

定义一个具体的被观察者类,两个具体的观察者类date

package yct.com.watcher.impl;
import java.util.ArrayList;
import java.util.List;
import yct.com.watcher.Watched;
import yct.com.watcher.Watcher;
public class BoyWatched implements Watched{
//观察者集合
List<Watcher> watchers=new ArrayList<Watcher>();
//构造器
public BoyWatched(){
System.out.println("BoyWatched:我是男的!");
}
//添加观察者
public void add(Watcher watcher) {
watchers.add(watcher);
}
//删除观察者
public void delete(Watcher watcher) {
watchers.remove(watcher);
}
//通知观察者
public void notifyWatchers(String msg) {
System.out.println(msg);
for(Watcher watcher:watchers){
watcher.update();
}
}
}
package yct.com.watcher.impl;
import yct.com.watcher.Watcher;
/**
 * 定义一个具体的观察者(boyWatcher)
 * @author 哥帅
 * weixin:YangCongTou8023
 */
public class BoyWatcher implements Watcher{
public void update() {
System.out.println("BoyWatcher:我还爱你。。");
}
}
package yct.com.watcher.impl;
import yct.com.watcher.Watcher;
/**
 * 定义一个具体的观察者(grilWatcher)
 * @author 哥帅
 * weixin:YangCongTou8023
 */
public class GrilWatcher implements Watcher{
public void update() {
System.out.println("GrilWatcher:我也要去!");
}
}

这就是最简单的观察者模式,观察者模式有分推模型和拉模型,以上代码属于推模型。只须要被观察者的通知方法将本身做为参数便可,这要观察者能够经过此参数主动获取数据,即“拉”。
List

有写错的地方望指教!

相关文章
相关标签/搜索