[Design Pattern] Observer Pattern 简单案例
Posted TonyYPZhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Design Pattern] Observer Pattern 简单案例相关的知识,希望对你有一定的参考价值。
Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式。
下面是一个观察者模式的简单案例。
Observer 定义观察者的接口,定义需要观察的对象,已经被通知的接口。BinaryObserver, OctalObserver, HexaObserver 各自实现了 Observer 接口。
Subject 是被观察的对象,记录了观察该对象的观察者列表,自身有变动,即可通知观察者列表中的各个观察者。
代码实现
Observer 接口,定义了被通知的方法,定义了观察的对象。
public abstract class Observer { protected Subject subject; public abstract void update(int value); }
BinaryObserver, OctalObserver, HexaObserver 实现了 Observer 接口,实现了具体的被通知方法。
public class BinaryObserver extends Observer { public BinaryObserver(Subject subject){ this.subject = subject; subject.attach(this); } @Override public void update(int value) { System.out.println("BinaryObserver " + Integer.toString(value, 2)); } }
public class OctalObserver extends Observer { public OctalObserver(Subject subject){ this.subject = subject; subject.attach(this); } @Override public void update(int value) { System.out.println("octal Observer update " + Integer.toString(value, 8)); } }
public class HexaObserver extends Observer { public HexaObserver(Subject subject){ this.subject = subject; subject.attach(this); } @Override public void update(int value) { System.out.println("hexa Observer update " + Integer.toString(value, 16)); } }
Subject 是被观察的对象,内含一个观察本对象的观察者名单
public class Subject { private List<Observer> observers = new LinkedList<>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; this.notifyAllObservers(); } public void attach(Observer observer){ observers.add(observer); } public void notifyAllObservers(){ for (Observer observer : observers){ observer.update(state); } } }
演示代码,每次更新 Subject 对象的属性,Subject 都会通知到观察它的观察者
public class ObserverPatternDemo { public static void main(){ Subject subject = new Subject(); new BinaryObserver(subject); new OctalObserver(subject); new HexaObserver(subject); subject.setState(17); subject.setState(9); } }
参考资料
Design Patterns - Observer Pattern, TutorlsPoint
以上是关于[Design Pattern] Observer Pattern 简单案例的主要内容,如果未能解决你的问题,请参考以下文章