热点新闻
设计模式之观察者模式
2023-07-05 03:34  浏览:517  搜索引擎搜索“错改B2B”
温馨提示:信息一旦丢失不一定找得到,请务必收藏信息以备急用!本站所有信息均是注册会员发布如遇到侵权请联系文章中的联系方式或客服删除!
联系我时,请说明是在错改B2B看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

1. 观察者模式

  • 观察者模式(Observer Pattern)
  • 观察者模式又叫作发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependent)模式
  • 一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,每当主题对象状态变化时,所有依赖它的对象都会得到通知并被自动更新

观察者模式的核心是将观察者与被观察者解耦,以类似消息/广播发送的机制联动两者,使被观察者的变动能通知到感兴趣的观察者们,从而做出相应的响应

1.1 组成

  • 抽象主题(ISubject):指被观察的对象(IObservable)
  • 具体主题(ConcreteSubject):具体被观察者
  • 抽象观察者(IObserver):定义响应通知的更新方法
  • 具体观察者(ConcreteObserver):当得到状态更新的通知时,会自动做出响应

2. 示例

注册观察者,订阅主题(subject)

public interface ISubject { void notify(String event); boolean register(IObservable observable); boolean remove(IObservable observable); }

public class ConcreteSubject implements ISubject { private List<IObservable> observables = new ArrayList<>(); @Override public boolean register(IObservable observable) { return !this.observables.contains(observable) && this.observables.add(observable); } @Override public boolean remove(IObservable observable) { return this.observables.remove(observable); } @Override public void notify(String event) { for (IObservable observable : this.observables) { observable.handler(event); } } }

Observer 接口,它将不同的观察者聚合在一起

public interface IObservable { void handler(String event); } public class ConcreteObserverA implements IObservable { @Override public void handler(String event) { System.out.println("concrete observer A: " + event); } } public class ConcreteObserverB implements IObservable { @Override public void handler(String event) { System.out.println("concrete observer B: " + event); } }

测试:

@Test public void test() { ISubject subject = new ConcreteSubject(); subject.register(new ConcreteObserverA()); subject.register(new ConcreteObserverB()); subject.notify("test"); }

发布人:4fcb****    IP:223.213.19.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发