观察者模式
2017-08-02 10:57
113 查看
百度百科
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
观察者抽象类
订阅者A
订阅者B
报纸抽象类(被观察者)
客户端
Observable是java实现观察者模式的一种方式,被观察者需要继承Observable,观察者实现Observer接口。
被观察者
观察者
测试类
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
观察者抽象类
//抽象的报纸订阅者 public abstract class Subscribers { //提供一个方法,供观察者调用,更新状态 //比如提供一个信箱,把报纸放进去 public abstract void update(String state); }
订阅者A
public class SubscribersA extends Subscribers{ @Override public void update(String state) { System.out.println("报纸更新了,内容:" + state); } }
订阅者B
public class SubscribersB extends Subscribers{ @Override public void update(String state) { System.out.println("报纸更新了,内容:" + state); } }
报纸抽象类(被观察者)
public abstract class Newspaper { //哪些人订阅了报纸 protected List<Subscribers> subscribers = new ArrayList<>(); //添加到订阅者列表中 public void add(Subscribers subscriber) { subscribers.add(subscriber); } //取消订阅 public void delete(Subscribers subscriber) { subscribers.remove(subscriber); } //通知订阅者,报纸更新了 public void notifySubscribers(String content) { for (Subscribers subscriber : subscribers) { subscriber.update(content); } } }
客户端
public class Main { public static void main(String[] args) { Newspaper xinhua = new XinhuaDaily(); Subscribers a = new SubscribersA(); Subscribers b = new SubscribersB(); xinhua.add(a); xinhua.add(b); xinhua.notifySubscribers("2018来了"); } }
Observable是java实现观察者模式的一种方式,被观察者需要继承Observable,观察者实现Observer接口。
被观察者
//学生,被观察者,继承Observable(可以被观察的) public class Student extends Observable { public void study(){ System.out.println("学生:1+1=几"); setChanged(); //只有调用setChanged()方法和并通知观察者notifyObservers(),观察者才会解释到通知,调用观察者内部update()方法 notifyObservers(); } }
观察者
//观察者内部必须重写update()方法 public class Teacher implements Observer{ @Override public void update(Observable observable, Object object) { //observable,被观察者可以直接把自己传递给观察者 //object,被观察者可以传递对象给观察者 System.out.println("老师:2"); } }
测试类
public class Test { public static void main(String[] args) { Student student = new Student(); //创建一个被观察者 Teacher teacher = new Teacher(); //创建一个观察者 student.addObserver(teacher); //把被观察者添加到观察者所观察的集合中 student.study(); } }
相关文章推荐
- (Head First 设计模式)学习笔记(2) --观察者模式(气象站实例)
- 观察者模式--实例
- 设计模式之十四 观察者模式(老板回来我不知道)
- 观察者模式observer(行为型设计模式)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 第十四章 老板回来我不知道--观察者模式(读书笔记)
- IOS设计模式之四:观察者模式
- 观察者模式(Observer Pattern)
- 观察者模式
- 观察者模式总结
- 观察者模式(Head First设计模式学习2)
- 对象间的联动——观察者模式(一)
- 观察者模式(监听器模式)
- 观察者模式
- 观察者模式与发布/订阅模式的区别
- 观察者模式
- 观察者模式
- 观察者模式(监听器模式)
- 观察者模式(Observer)