观察者模式
August 2020
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
使用场景:
- 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
- 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
- 一个对象必须通知其他对象,而并不知道这些对象是谁。
- 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| import javax.crypto.interfaces.PBEKey; import java.util.ArrayList; import java.util.List;
class Publish { public int single; public List<Reader> readers = new ArrayList<>();
public void setSingle(int single) { this.single = single; notifyAllReader(); }
public int getSingle() { return single; }
public void addReader(Reader reader){ readers.add(reader); }
public void notifyAllReader(){ for (Reader reader : readers) { reader.doSomething(); } } }
class Reader{ public Publish publish = new Publish();
public void doSomething() {
}
}
class ReadA extends Reader {
public ReadA(Publish publish){ this.publish = publish; this.publish.addReader(this); }
public void doSomething(){ System.out.println("I'm A, single =" + publish.getSingle()); } }
class ReadB extends Reader{ public ReadB(Publish publish){ this.publish = publish; this.publish.addReader(this); }
public void doSomething(){ System.out.println("I'm B, single ="+ publish.getSingle()); } }
public class PublishReaderDemo{ public static void main(String[] args) { Publish publish = new Publish(); Reader readerA = new ReadA(publish); Reader readerB = new ReadA(publish); publish.setSingle(1); publish.setSingle(2); } }
|
参考
发布时间: 2020-08-14 21:59:10
更新时间: 2022-04-21 16:19:35
本文链接: https://wyatt.ink/posts/Code/168b5985.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!