首页 > 其他分享 >观察者模式

观察者模式

时间:2023-06-24 12:33:36浏览次数:33  
标签:observer void 观察者 模式 public IObserver FirstObserver

观察者模式

使用场景:一对多的关联关系,需要一套触发机制。

模式类型:观察者模式

优点

观察者与被观察者之间建立抽象的耦合,降低耦合。

观察者模式支持广播通信。

缺点:

观察者之间依赖较多,比较复杂。

  • 观察者接口
/**
 * @author admin
 */
public interface IObserver {
    /**
     * 前置操作
     */
    void before();

    /**
     * 跟新操作
     */
    void update();

    /**
     * 后置操作
     */
    void after();
}
  • 观察者实现
/**
 * @author admin
 */
public class FirstObserver implements IObserver {
    @Override
    public void before() {
        System.out.println("FirstObserver is doing before action.");
    }

    @Override
    public void update() {
        before();
        System.out.println("FirstObserver is updating.");
        after();
    }

    @Override
    public void after() {
        System.out.println("FirstObserver is doing after action.");
    }
}
  • 被观察者接口
/**
 * @author admin
 */
public interface ISubject {
    /**
     * 增加观察者
     *
     * @param observer 观察者
     * @return 是否成功
     */
    boolean addObserver(IObserver observer);

    /**
     * 移除观察者
     *
     * @param observer 观察者
     * @return 是否成功
     */
    boolean removeObserver(IObserver observer);

    /**
     * 通知所有观察者
     */
    void notifyAllObservers();
}
  • 被观察者具体实现
/**
 * 具体主题
 */
public class ConcreteSubject implements ISubject {
    List<IObserver> list = new ArrayList<>();

    @Override
    public boolean addObserver(IObserver observer) {
        list.add(observer);
        return true;
    }

    @Override
    public boolean removeObserver(IObserver observer) {
        list.remove(observer);
        return true;
    }

    @Override
    public void notifyAllObservers() {
        for (IObserver observer : list) {
            observer.update();
        }
    }
}
  • 客户端
/**
 * @author admin
 */
public class Client {
    public static void main(String[] args) {
        ConcreteSubject concreteSubject = new ConcreteSubject();
        concreteSubject.addObserver(new FirstObserver());
        concreteSubject.notifyAllObservers();
    }
}
  • 执行结果

FirstObserver is doing before action.
FirstObserver is updating.
FirstObserver is doing after action.

标签:observer,void,观察者,模式,public,IObserver,FirstObserver
From: https://www.cnblogs.com/kouhao/p/17500914.html

相关文章

  • 2023跟我一起学设计模式:组合模式
    组合模式组合模式是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。问题如果应用的核心模型能用树状结构表示,在应用中使用组合模式才有价值。例如,你有两类对象:产品和盒子。一个盒子中可以包含多个产品或者几个较小的盒子。这......
  • 外观模式-12
    概述外观模式(FacadePattern)又称门面模式。它为多个子系统的接口提供了一致的访问接口,定义了高层接口,使得子系统更易于使用。优点:使子系统易于使用,实现客户和子系统的松耦合关系,不影响客户直接使用子系统类。缺点:一定程度上违反“开闭原则”。图示:引入抽象外观类一定程......
  • Reactor 模式与Tomcat中的Reactor
    系列文章目录和关于我参考:[nio.pdf(oswego.edu)](https://gee.cs.oswego.edu/dl/cpjslides/nio.pdf)一丶什么是ReactorThereactordesignpatternisaneventhandlingpatternforhandlingservicerequestsdeliveredconcurrentlytoaservicehandlerbyoneormore......
  • 2023 跟我一起学设计模式:命令模式
    命令模式亦称:动作、事务、Action、Transaction、Command命令模式是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。问题假如你正在开发一款新的文字编......
  • 头一次见单例模式讲的如此透彻
    简介单例模式是一种常用的软件设计模式,用于创建类型。通过单例模式的方法创建的类在当前进程中只有一个实例。单例模式的类只能允许一个实例存在。单例模式的作用是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个。组成部分:私有化构造方法。私有化内部......
  • 装饰模式-11
    概述装饰模式(DecoratorPattern)又称包装器,与适配器模式别名一样,但使用的目的不同。它动态地给一个对象添加职责,相比于通过继承添加职责更加灵活。也称“油漆工”模式(视翻译而定)。优点:扩展对象功能的同时提高了灵活性,符合“开闭原则”。缺点:增加系统的复杂性。interfaceCo......
  • Android四种Activity的加载模式
    建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式:Android的进程,线程模型其中对“Android的单线程模型”的描述,明白Activity的一些注意事项。AndroidApplicationTaskActivities的关系尤其要明白Task是啥。 一个Activty的生命周期Activty的生命周期的也......
  • RAW域算法之固定模式噪声消除FPN
    固定模式噪声消除(FixedPatternNoiseRemove)由于Sensor工艺的原因导致了Sensor会在固定的位置产生相对固定的随时间变化较小的噪声,称之为固定模式噪声。固定模式噪声一般出现于CMOSSensor,并且Sensor的模拟增益或者列增益开的越大,固定模式噪声越明显。图12增益增大时......
  • hiredis的同步模式和异步模式
    1.什么是hiredisHiredis是一个C语言编写的Redis客户端库,用于与Redis数据库进行交互。它提供了一个简洁而高效的接口,使开发人员可以方便地在自己的C/C++项目中使用Redis。Hiredis是一个开源项目,可从其官方GitHub仓库获取源代码,并在符合BSD许可证的条件下使用和分......
  • 智能化制造:一种新的生产模式
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解5.优化与改进6.结论与展望智能化制造:一种新的生产模式随着人工智能技术的不断发展,智能化制造成为了现代制造业的一个重要趋势。智能化制造能够实现生产过程中的自动化、智能化和数据化,提高生产效率和......