设计模式-观察者模式

本文将会从定义,类图,案例等几个方面对观察者模式进行说明:

定义

观察者模式:定义了一种一对多的依赖关系,一个主题对象可以同时被多个观察者对象同时监听,使得每当主题对象状态发生变化时,所有依赖它的对象都会得到通知并自动更新,属于行为者模式。

观察模式又叫做发布-订阅模式,模型-视图模式,源-监听模式或从属者模式,其核心是将观察者和被观察者解耦。

类图

观察者模式

根据类图给出模板代码:

public interface Subject {

/**主题接口*/

void attach(Observer o);

void detach(Observer o);

void notify(Message m);

}

public interface Observer {

/**观察者接口*/

void update(Message message);

}

public class ConcreteSubject implements Subject {

/**具体主题生产者*/

private List observers = new ArrayList();

@Override

public void attach(Observer o) {

observers.add(o);

}

@Override

public void detach(Observer o) {

observers.remove(o);

}

@Override

public void notify(Message message) {

for(Observer observer: observers){

observer.update(message);

}

}

}

public class ConcreteObserver implements Observer{

/**具体观察者**/

@Override

public void update(Message message) {

//根据实际情况编写

}

}

public class Message {

/**消息,这里简写*/

}

public class Client {

public static void main(String[] args) {

Subject subject = new ConcreteSubject();

subject.attach(new ConcreteObserver());

subject.notify();

}

}

案例

1:JDK自带的Observable和Observer实现观察者模式

gihub地址:https://github.com/siweidetu/DesignPattern/tree/master/gper

参考书籍:《设计模式就该这样学:基于经典框架源码和真实业务场景》

2: Guava实现观察者模式

gihub地址:https://github.com/siweidetu/DesignPattern/tree/master/guava

gihub地址:https://github.com/siweidetu/DesignPattern/tree/master/guava2

参考书籍:《设计模式之美》

3: javascript观察者模式

gihub地址:https://github.com/siweidetu/DesignPattern/blob/master/scripts/observer

参考书籍:《javascript设计模式》

总结:

文中的案例会不断的完善,从更多的角度去分析,增加对这种模式的理解,落实到实践中。


你可能感兴趣的:(设计模式-观察者模式)