您的位置:首页 > 其它

设计模式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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: