观察者模式

本文深入解析了观察者模式(Observer Pattern)的原理及其在解决对象间一对多依赖问题中的应用。通过具体案例演示了如何使用观察者模式进行状态传递及业务逻辑处理,实现了对象间的松耦合。

简述:

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

 

观察者模式适用场景

 

当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。
当对一个对象的改变需要同时改变其它对象,而不知道具体有多少个对象待改变。
当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换句话说,你不希望这些对象是紧密耦合的,做到(松耦合,高内聚)

 

 

下面通过一个案例:传入一个状态,并执行相关的业务操作

代码实例:

定义一个抽象观察者类

public interface Observer {

    /**
     * 当观察者接收到状态时,执行update方法的业务逻辑
     * @param state
     */
    void update(String state);
}

实现两个具体的观察者

 ObserverA与ObserverB

public class ObserverA implements Observer{

    @Override
    public void update(String state) {
        System.out.println("ObserverA接收到状态:"+state + ",实行相关的业务逻辑");
    }
}
public class ObserverB implements Observer{

    @Override
    public void update(String state) {
        System.out.println("ObserverB接收到状态:"+state+",执行相关的业务逻辑");
    }
}

 

 定义抽象的主题,用于注册所有的观察者

public abstract class Subject {

    /**
     * 观察的集合
     */
    private List<Observer> list = new ArrayList<>();

    /**
     * 添加观察者对象(注册)
     * @param observer
     */
    public void addObserver(Observer observer){
        list.add(observer);
    }

    /**
     * 移除观察者
     * @param observer
     */
    public void removeObserver(Observer observer){
        list.remove(observer);
    }

    /**
     * 通知所有的观察者,
     * 并且观察者会依据这个通知执行自身相关的业务逻辑
     *
     * 其实就是调用所有观察者的具体行为
     * @param state
     */
    protected void notifyObserver(String state){
        for (Observer observer : list) {
            observer.update(state);
        }
    }
}

 

具体的主题,有一个独有的change()方法

public class SubjectA extends Subject{

    /**
     * 主题发生变化时,执行此方法
     */
    public void change(String state){
        notifyObserver(state);
    }
}

 测试(Main)类

public class Main {

    public static void main(String[] args) {
        //创建主题
        SubjectA a = new SubjectA();
        //创建观察者
        Observer o1 = new ObserverA();
        Observer o2 = new ObserverB();
        //注册所有的观察者
        a.addObserver(o1);
        a.addObserver(o2);

        a.change("create");
    }
}

 

转载于:https://www.cnblogs.com/ywbmaster/p/9805349.html

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同具备一屏多显、语音互动功能,支持多人连麦,实语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值