浅谈设计模式:观察者模式(Observer Pattern)

什么是命令模式?

官方解释:

Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

在对象之间定义一个一对多的依赖关系,当一个对象状态变更时,所有依赖的对象也随着自动更新。通俗解释:某些对象(观察者)对某个特定的对象(被观察者)感兴趣,想让这个对象在状态变更的时候能即时得到通知,好做出相对应的变化。因此这个对象便注册了这个观察者对象,,增加到自身的观察者依赖列表中。当自身状态变更时将信息通知到这个依赖列表的所有观察者中。为什么使用观察者模式?如何使用命令模式?

具体用例: 场景:现在有一个互联网报社基站,需要当有新的报刊信息将信息的发送到订阅了的用户邮箱上。一个基站可能包含了不同的分类报刊信息,如JAVA、C++、PHP等,而用户的喜好也各不相同,仅仅选择喜欢的分类来订阅。

实现:

public class MessagePublisher {private List<Observer> subscriberList = new ArrayList<Observer>();(Observer observer) {subscriberList.add(observer);}(Observer observer) {subscriberList.remove(subscriberList.indexOf(observer));}(String state) {for(Observer observer : subscriberList){observer.update(state);}}}update(String state);}{private String state;public String getState() {return state;}(String state) {this.state = state;notifySubscribers(state);}}{private String state;public String getState() {return state;}(String state) {this.state = state;notifySubscribers(state);}}{private String userName;private String userMail;public Subscriber(String userName, String userMail){this.userName = userName;this.userMail = userMail;}(String state) {System.out.println(userName + “(“+ userMail + “) got a new message:” + state);}}public class Main {(String[] args) {JavaMessagePublisher javaMessagePublisher = new JavaMessagePublisher();Subscriber userA = new Subscriber(“zhangsan”, “zhangsan@gmail.com”);Subscriber userB = new Subscriber(“lisi”, “lisi@gmail.com”);javaMessagePublisher.addSubscriber(userA);javaMessagePublisher.addSubscriber(userB);javaMessagePublisher.setState(“jdk 1.8 publish!!!”);PHPMessagePublisher phpMessagePublisher = new PHPMessagePublisher();Subscriber userC = new Subscriber(“zhaowu”, “zhaowu@gmail.com”);phpMessagePublisher.addSubscriber(userA);phpMessagePublisher.addSubscriber(userC);phpMessagePublisher.setState(“php has a new version!!!”);}}

尝到你和你在一起的快乐,你是唯一能让我尝到酸甜苦辣的人。

浅谈设计模式:观察者模式(Observer Pattern)

相关文章:

你感兴趣的文章:

标签云: