观察者模式,状态模式(例子)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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(); }
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); } @Override public void Notify() { for(IBoy b:boys){ b.Update(); } }
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(); } }
public interface IBoy { void Update(); }
public class Qiang implements IBoy { @Override public void Update() { System.out.println("小强说状态已更改"); }
public class Cai implements IBoy { @Override public void Update() { System.out.println("状态已更改--Cai"); }
例子
• • • • • • • • 有一个美丽的善良的姑娘 很多的追求者 追求者队伍会不断的变换 追求者最喜欢问的话“你在干嘛” 善良的姑娘不断的回复 困惑 姑娘:不断回复给很多人 追求者:不断询问
解决
• 用关注的方式 • 如果boy关注了女孩,则可以通过数据绑定 方法获得女孩的状态列表。 • 女孩会更新自己的状态
}
来自百度文库
状态模式
• P201 • State • 意图 • 允许一个对象在其内部改变时改变它的行 为,对象看起来似乎修改了它的类 • 若一个对象有多种状态,则将它的状态封 装成对象,需要的时候,在对象间进行变 换。
例子
• 打游戏的幸福状态
Normal
Mad

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(); }
练习
• 订阅新闻 • 有个新闻自动发布系统,用户可以订阅或 取消订阅该系统,当该系统有新内容时, 会通知给订阅它的用户。 • 订阅用户可以通过update方法,获得新闻 更新。 • 画类图,写完整代码
public interface INews { void Add(IUser u); void Remove(IUser u); void Notify(); } public interface IUser { void Update(); } public class Seven implements IUser { @Override public void Update() { System.out.println("我的新闻列表已更新---Seven"); } }
相关文档
最新文档