`
yaoweinan
  • 浏览: 137545 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

观察模式实现粉丝模仿明星说话

 
阅读更多
艺术圈 写道
package cn.watchermodel;

/**
* 艺术圈 粉丝模仿明星说话
* @author 姚伟楠
*
*/
public class ArtCycle {

/**
* @param args
*/
public static void main(String[] args) {
Star star=new Star("谢霆锋");
for(int i=0;i<10;i++){
star.addWatcher(new Fan("粉丝"+i));
}
star.say("大家好,我是谢霆锋,我喜欢蔡依林");
}

}

 

粉丝类 写道
package cn.watchermodel;

/**
* 粉丝类
* @author 姚伟楠
*
*/
public class Fan extends Person implements Watcher {
public Fan(String name) {
super(name);
}

@Override
public void watcherPerform(String msg) {
say(msg);
}

@Override
protected void say(String msg) {
System.out.println(this.getName()+"說:"+msg);

}

}

 

人类 写道
package cn.watchermodel;

/**
* 人类 抽象
* @author 姚伟楠
*
*/
public abstract class Person {
private String name;
public Person(String name) {
this.name = name;
}
protected abstract void say(String msg);

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

 

明星类 写道
package cn.watchermodel;

import java.util.ArrayList;
import java.util.List;


/**
* 明星类
* @author 姚伟楠
*
*/
public class Star extends Person implements Watched {
public Star(String name) {
super(name);
}
private List<Watcher> fans=new ArrayList<Watcher>();
private String favorate="";
@Override
public void addWatcher(Watcher watcher) {
if(null!=watcher){
fans.add(watcher);
}
}
/**
* 说出自己的爱好
*/
public void say(String msg){
favorate=msg;
notifyAllWatcher();
}
@Override
public void romoveWatcher(Watcher watcher) {
fans.remove(watcher);
}

@Override
public void notifyAllWatcher() {
for(Watcher watcher:fans){
watcher.watcherPerform(favorate);
}

}

}

 

被监视对象应有的接口 写道
package cn.watchermodel;

/**
* 被监视对象应有的接口
* @author 姚伟楠
*
*/
public interface Watched {
/**
* 添加监视者
*
* @param watcher
*/
public void addWatcher(Watcher watcher);
/**
* 移除监视者
* @param watcher
*/
public void romoveWatcher(Watcher watcher);
/**
* 通知监视者信息
*/
public void notifyAllWatcher();
}

 

监视着外接接口 写道
package cn.watchermodel;

/**
* 监视着外接接口
* @author 姚伟楠
*
*/
public interface Watcher {
/**
* 监听事件
* @param msg
*/
public void watcherPerform(String msg);
}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics