设计模式11---观察者模式
2014-12-11 17:01
260 查看
观察者模式实质就是提取:提取监听对象的过程是相同的,也就是说observer类为根据不同的subject的状态做出相应的反应。
package com.jayfulmath.designpattern.observer; public abstract class Observer { protected String name; protected ISubject sub; public Observer(String name, ISubject sub) { this.name = name; this.sub = sub; } public abstract void Update(); }
public interface ISubject { public void Attach(Observer obs); public void Detach(Observer obs); public void Broadcast(); public String getSubjectStatus(); public void setSubjectStatus(String subjectStatus); }
public class NBALooker extends Observer { public NBALooker(String name, ISubject sub) { super(name, sub); // TODO Auto-generated constructor stub } @Override public void Update() { System.out.println(sub.getSubjectStatus()+"\t"+name+"\tstop NBA Look"); } }
public class NBALooker extends Observer { public NBALooker(String name, ISubject sub) { super(name, sub); // TODO Auto-generated constructor stub } @Override public void Update() { System.out.println(sub.getSubjectStatus()+"\t"+name+"\tstop NBA Look"); } }
public class StockLooker extends Observer { public StockLooker(String name, ISubject sub) { super(name, sub); // TODO Auto-generated constructor stub } @Override public void Update() { // TODO Auto-generated method stub System.out.println(sub.getSubjectStatus()+"\t"+name+"\tstop Stock Look"); } }
import java.util.ArrayList; import java.util.List; public class Boss implements ISubject { List<Observer> _mObservers = new ArrayList<Observer>(); public String subjectStatus; public void Attach(Observer obs) { _mObservers.add(obs); } public void Detach(Observer obs) { _mObservers.remove(obs); } public void Broadcast() { //here may be asynchronous to notify observer for(Observer observer :_mObservers) { observer.Update(); } } /** * @return the subjectStatus */ public String getSubjectStatus() { return subjectStatus; } /** * @param subjectStatus the subjectStatus to set */ public void setSubjectStatus(String subjectStatus) { this.subjectStatus = subjectStatus; } }
main:
public class ObserverMain extends BasicExample { @Override public void startDemo() { ISubject huhanshang = new Boss(); Observer maweidong = ObserverFactory.Factory("NBALooker", "maweidong", huhanshang); Observer zhangdashang = ObserverFactory.Factory("StockLooker", "zhangdashang", huhanshang); huhanshang.Attach(maweidong); huhanshang.Attach(zhangdashang); huhanshang.setSubjectStatus("I am back! Huhan Shang!"); huhanshang.Broadcast(); } }
相关文章推荐
- Android设计模式之(11)----观察者模式
- 11. JAVA常用类库 Part 4 (对象克隆技术clone、Arrays类、Comparable接口、比较器Comparator、观察者设计模式) ----- 学习笔记
- PHP 设计模式 笔记与总结(11)观察者模式
- 设计模式(11)--Mediator中介者模式&Observer观察者模式
- 探究观察者设计模式
- C#设计模式(11)-Composite Pattern
- 利用观察者模式设计仿真器内核接口
- IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式
- 探究观察者设计模式
- 设计模式(11)-单例模式(Flyweight)
- GEF框架中的设计模型(观察者模式)
- 设计模式笔记(11 OBSERVER & STATE)
- 用 spring 实现观察者设计模式
- 设计模式理解 - 伟大的【Observer 观察者模式】
- 设计模式与泡mm的关系之Observer观察者模式及再思考
- .NET中的设计模式五:观察者模式
- 用spring实现观察者设计模式
- AspectJ实现设计模式(一)——观察者模式
- C#中利用代理实现观察者设计模式
- 设计模式之观察者模式(Observer Pattern)(二)