欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

设计模式观察者模式使用场景,观察者模式属于什么型设计模式

墨初 知识笔记 104阅读
观察者模式 1.什么是观察者模式

先讲什么是行为性模型行为型模式关注的是系统中对象之间的相互交互解决系统在运行时对象之间的相互通信和协作进一步明确对象的职责。

观察者模式是一种行为性模型又叫发布-订阅模式他定义对象之间一种一对多的依赖关系使得当一个对象改变状态则所有依赖于它的对象都会得到通知并自动更新。

2.模式的职责 观察者模式主要用于1对N的通知。当一个对象的状态变化时他需要及时告知一系列对象令他们做出相应。
实现有两种方式 推每次都会把通知以广播的方式发送给所有观察者所有的观察者只能被动接收。拉观察者只要知道有情况即可至于什么时候获取内容获取什么内容都可以自主决定。 3.观察者模式应用场景 关联行为场景需要注意的是关联行为是可拆分的而不是“组合”关系。事件多级触发场景。跨系统的消息交换场景如消息队列、事件总线的处理机制。 4.代码实现观察者模式 1. 定义抽象观察者每一个实现该接口的实现类都是具体观察者。
package com.lijie;//观察者的接口用来存放观察者共有方法public interface Observer {    // 观察者方法    void update(int state);}
2.定义具体观察者
package com.lijie;// 具体观察者public class ObserverImpl implements Observer {    // 具体观察者的属性    private int myState;    public void update(int state) {        myStatestate;        System.out.println(收到消息,myState值改为state);    }    public int getMyState() {        return myState;    }}
3.定义主题。主题定义观察者数组并实现增、删及通知操作。
package com.lijie;import java.util.Vector;//定义主题以及定义观察者数组并实现增、删及通知操作。public class Subjecct {//观察者的存储集合不推荐ArrayList线程不安全private Vector<Observer> list  new Vector<>();// 注册观察者方法public void registerObserver(Observer obs) {list.add(obs);}    // 删除观察者方法public void removeObserver(Observer obs) {list.remove(obs);}// 通知所有的观察者更新public void notifyAllObserver(int state) {for (Observer observer : list) {observer.update(state);}}}
4.定义具体的他继承继承Subject类在这里实现具体业务在具体项目中该类会有很多。
package com.lijie;//具体主题public class RealObserver extends Subjecct {    //被观察对象的属性 private int state; public int getState(){ return state; } public void  setState(int state){ this.statestate; //主题对象(目标对象)值发生改变 this.notifyAllObserver(state); }}
5.运行测试
package com.lijie;public class Client {public static void main(String[] args) {// 目标对象RealObserver subject  new RealObserver();// 创建多个观察者ObserverImpl obs1  new ObserverImpl();ObserverImpl obs2  new ObserverImpl();ObserverImpl obs3  new ObserverImpl();// 注册到观察队列中subject.registerObserver(obs1);subject.registerObserver(obs2);subject.registerObserver(obs3);// 改变State状态subject.setState(300);System.out.println(obs1观察者的MyState状态值为obs1.getMyState());System.out.println(obs2观察者的MyState状态值为obs2.getMyState());System.out.println(obs3观察者的MyState状态值为obs3.getMyState());// 改变State状态subject.setState(400);System.out.println(obs1观察者的MyState状态值为obs1.getMyState());System.out.println(obs2观察者的MyState状态值为obs2.getMyState());System.out.println(obs3观察者的MyState状态值为obs3.getMyState());}}

标签:
声明:无特别说明,转载请标明本文来源!