首页 > 代码库 > 设计模式之观察者模式
设计模式之观察者模式
杨哥说观察者设计模式,通俗易懂,只要看图和例子即可。
//通知者接口
package guanchazhe_designmode;
//抽象观察者
public abstract class Observer {
protected String name;
protected Subject sub;
public Observer(String name, Subject sub)
{
this.name = name;
this.sub = sub;
}
public abstract void Update();
}
//抽象观察者
package guanchazhe_designmode;
//抽象观察者
public abstract class Observer {
protected String name;
protected Subject sub;
public Observer(String name, Subject sub)
{
this.name = name;
this.sub = sub;
}
public abstract void Update();
}
两个被观察者对象
class Secretary implements Subject
{
//同事列表
private List<Observer> observers = new ArrayList<Observer>();
private String action;//前台状态
public List<Observer> getObservers() {
return observers;
}
public void setObservers(List<Observer> observers) {
this.observers = observers;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
//增加
public void Attach(Observer observer)
{
observers.add(observer);
}
//减少
public void Detach(Observer observer)
{
observers.remove(observer);
}
//通知
public void Notify()
{
for(Observer o : observers){
o.Update();
}
}
@Override
public String getSubjectState() {
// TODO 自动生成的方法存根
return getAction();
}
}
class Boss implements Subject
{
//同事列表
private List<Observer> observers = new ArrayList<Observer>();
public List<Observer> getObservers() {
return observers;
}
public void setObservers(List<Observer> observers) {
this.observers = observers;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
private String action;//老板状态
//增加
public void Attach(Observer observer)
{
observers.add(observer);
}
//减少
public void Detach(Observer observer)
{
observers.remove(observer);
}
//通知
public void Notify()
{
for(Observer o : observers){
o.Update();
}
}
@Override
public String getSubjectState() {
// TODO 自动生成的方法存根
return getAction();
}
}
观察者对象(也可以理解为订阅用户)
//看股票的同事
class StockObserver extends Observer
{
public StockObserver(String name, Subject sub)
{
super(name, sub);
}
public void Update()
{
System.out.println("关闭股票行情,继续工作!"+sub.getSubjectState()+""+name);
}
}
//看NBA的同事
class NBAObserver extends Observer
{
public NBAObserver(String name, Subject sub)
{
super(name, sub);
}
public void Update()
{
System.out.println("关闭NBA直播,继续工作!!"+sub.getSubjectState()+""+name);
}
}
//程序入口
public static void main(String[] args) {
// TODO 自动生成的方法存根
Operation oper;
oper=(new FactoryMian()).new OperationFactory().createOperate("+");
oper.set_numberA(1);
oper.set_numberB(2);
double result=oper.getResult();
System.out.print(result);
}
执行效果:
观察者原理:
关键对象是主题Subject和观察者Oberver,一个Subject可以有任意数目的依赖它的Observer,一旦Subject的状态发生了改变,所有的Observer都可以得到通知。Subject发出通知时并不需要知道是它的观察者,也就是说,具体的观察者是谁,它根本不需要知道。而任何一个具体的观察者不知道耶不需要知道其他观察者的存在。就这么简单,不用多说
在Android开发中其实有好多的场景设计都使用了观察者模式,比如按钮事件事件的触发其实也用了这个设计模式,rxjava也是等等,所以啊,有事没事就多多用用观察者模式啊。
设计模式之观察者模式