当前位置:
文档之家› 观察者模式,状态模式(例子)概论
观察者模式,状态模式(例子)概论
public class XiaoMing {
public static void main(String[] args) { IUser seven =new Seven(); News news=new News(); news.Add(seven); news.title="新标题"; news.contex="新内容"; news.Notify();
@Override public void Notify() {
for(IBoy b:boys){ b.Update(); }
}
public interface IBoy { void Update();
}
public class Qiang implements IBoy { @Override public void Update() { System.out.println("小强说状态已更改"); }
例子
• 有一个美丽的善良的姑娘 • 很多的追求者 • 追求者队伍会不断的变换 • 追求者最喜欢问的话“你在干嘛” • 善良的姑娘不断的回复 • 困惑 • 姑娘:不断回复给很多人 • 追求者:不断询问
解决
• 用关注的方式 • 如果boy关注了女孩,则可以通过数据绑定
方法获得女孩的状态列表。 • 女孩会更新自己的状态
}
}
状态模式
• P201 • State • 意图 • 允许一个对象在其内部改变时改变它的行
为,对象看起来似乎修改了它的类 • 若一个对象有多种状态,则将它的状态封
装成对象,需要的时候,在对象间进行变 换。
例子
• 打游戏的幸福状态
Normal
Mad
吐
}
练习
• 订阅新闻
• 有个新闻自动发布系统,用户可以订阅或 取消订阅该系统,当该系统有新内容时,
会通知给订阅它的用户。 • 订阅用户可以通过update方法,获得新闻
更新。 • 画类图,写完整代码
public interface INews { void Add(IUser u); void Remove(IUser u); void Notify();
public class Cai implements IBoy {
@Override public void Update() {
System.out.println("状态已更改--Cai"); }
public class XiaoMing {
public static void main(String[] args) { IBoy qiang=new Qiang(); IBoy cai =new Cai(); SnowWhite sw=new SnowWhite(); sw.Add(qiang); sw.Add(cai); sw.state ="吃饭"; sw.Notify();
}
public class News implements INews { public String title,contex; ArrayList<IUser> myUsers=new ArrayList<IUser>(); @Override public void Add(IUser u) { myUsers.add(u); } @Override public void Remove(IUser u) { myUsers.remove(u); } @Override public void Notify() { for(IUser u:myUsers){ u.Update(); IUser { void Update();
}
public class Seven implements IUser {
@Override public void Update() {
System.out.println("我的新闻列表已更新---Seven"); }
public interface IPrincess { void Add(IBoy b); void Remove(IBoy b); void Notify();
public class SnowWhite implements IPrincess { String state; ArrayList<IBoy> boys=new ArrayList<IBoy>(); @Override public void Add(IBoy b) { boys.add(b); } @Override public void Remove(IBoy b) { boys.remove(b); }