java之观察者模式(大话设计模式)

     2022-03-26     151

关键词:

观察者模式,笔者以前做校验订单时用过一次,只是不知道有这个模式,当时使用观察者省略了N多if else

在笔者看来观察者模式比较试用于一个对象状态改变后,很多个对象也要根据这个状态做相应的动作,当然观察者模式只是给大家开了一扇门,更希望的是灵活运用,而不是拘泥于细节,

我们可以从中汲取到把实现相同接口的类来放到集合里,然后便利集合调取公共方法去完成相应的工作,先看下类图

大话设计模式-类图

技术分享图片

基于类图笔者写了如下的简单的实例。

/**
 * 通知者抽象接口
 */
public interface INotify {

    public void notifySub();

    public void addSub(ISubject subject);

    public void removeSub(ISubject subject);
}
/**
 * 观察者抽象接口
 */
public interface ISubject {

    public void updateState(String state);
}
/**
 * 具体通知者
 */
public class Notify implements INotify {

    private List<ISubject> subjects = new ArrayList<>();

    @Override
    public void addSub(ISubject subject) {
        subjects.add(subject);
    }

    @Override
    public void removeSub(ISubject subject) {
        subjects.remove(subject);
    }

    @Override
    public void notifySub() {
        for (ISubject subject : subjects) {
            subject.updateState("下订单了");
        }
    }
}
/**
 * 具体观察者
 */
public class Subject implements ISubject {

    @Override
    public void updateState(String state) {
        System.out.println(state);
    }
}
/**
 * 客户端
 */
public class Test {

    public static void main(String[] args) {
        INotify notify = new Notify();
        notify.addSub(new Subject());
        notify.notifySub();
    }
}

 

运行结果:

下订单了

 

设计模式,能够优化我们的代码,解耦,易扩展,易维护,不过如果不能够理解设计模式的精髓所在,生搬硬套可能收不到理想的效果。

笔者认为,吸取设计模式的思想才是学习的关键。以上是笔者对观察者的理解,希望能帮助学习的小伙伴!

大话设计模式之观察者模式

     从前,有个放羊娃。每天都去山上放羊,一天,他认为十分无聊。就想了个捉弄大家寻开心的主意。他向着山下正在种田的农夫们大声喊:“狼来了!狼来了!救命啊!”农夫们听到喊声急忙拿着锄头和镰... 查看详情

《大话设计模式》——读后感老板回来了,我不知道?——观察者模式之理论实例

单独看UML类图,有没有发现观察者类图和工厂方法模式的类图和相似?不过代码实现可不一样哦抽象观察者:packagecom.sjmx.observer.theory;publicinterfaceWatcher{publicvoidupdate(Stringstr);}具体观察者:packagecom.sjmx.observer.theory;publicclassConcreteWat... 查看详情

《大话设计模式》——读后感老板回来了,我不知道?——观察者模式之事件委托

什么都不说,直接上代码,自己去理解,要结合动态代理看Event:packagecom.sjmx.observer.application;importjava.lang.reflect.Method;publicclassEvent{privateObjectobject;privateStringmethodName;privateObject[]params;privateClass[]par 查看详情

常用设计模式之观察者模式+事件委托

常用设计模式之观察者模式+事件委托作用及UML(摘自《大话设计模式》) Code1abstractclassSubject{2protectedStringstate;3publicvoidsetState(Stringstate){this.state=state;}4publicStringgetState(){returnthis.state;}56privateList<O 查看详情

java之策略模式(大话设计模式)

温故而知新,每次读设计模式都会有不同的体验,坚持每天一个设计模式,直到熟练运用设计模式。策略模式定义了很多完成相同工作的算法,但实现不同,它可以以相同的方式调用所有的算法,减少了算法和调用算法的耦合。... 查看详情

java之状态模式(大话设计模式)

看过大话设计模式的小伙伴,都知道大话设计模式中的demo代码不是JAVA的,对于编程来说,设计模式不限于任何语言,讲述的是编程的思想。今天笔者再次看这篇文章时,看了下别人的博客对于设计模式的理解,希望能汲取点其... 查看详情

java之备忘录模式(大话设计模式)

...会经常用到吧!当然这只是笔者的推断。先看下类图大话设计模式-类图再继续看下Demo吧/***需要保存的进度信息类*/publicclassRoleSateMemento{privateIntegeratk;privateIntegervit;privateIntegerattack;publicRoleS 查看详情

java之模板模式(大话设计模式)

...用过,而且大家都比较喜欢这个模式,先看一下类图大话设计模式-类图作为一个程序员,不懂得“偷懒“,在笔者看来不是很合格哦!当我们编写程序时,发现很多个类所走的流程基本一致,只是少部分差异,这时我们就需要... 查看详情

java之命令模式(大话设计模式)

...比较频繁时,自然而然就用到命令模式。先看下类图大话设计模式-类图简单说下类图,最开始笔者看大话设计模式的时候也不是很喜欢看类图,主要原因是看不懂,后来当笔者第一次看完设计模式后,才真正意义上的理解类图... 查看详情

java之桥接模式(大话设计模式)

...它的实现部分分离,使它们都可以独立的变化。第一次看设计模式的时候,不是很清楚这句话的意思,随着笔者的不断开发,发现有一种场景,继承关系多了,不易于维护父类,而笔者认为桥接模式的出现很好的解决了这个问题... 查看详情

java之代理模式(大话设计模式)

...买可乐就是需要做的行为。这是笔者理解的代理模式大话设计模式-类图要想实现代理,那么代理类和被代理的类就都要实现一个共同的接口,就刚刚买可乐的例子,我和我的室友都可以买可乐。代理类可以动态的去做一些事情... 查看详情

java之抽象工厂模式(大话设计模式)

...们还是要吸取其思想而不是生搬硬套。来看下类图:大话设计模式-类图看类图已经很乱了,来简单的梳理下。我们只看接口,这样就不难看出实际上是抽象工厂生产抽象产品的过程,而具体实现都是各自的实现类来做。看下具... 查看详情

《大话设计模式》笔记——行为型模式1

14、观察者模式定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自... 查看详情

大话设计模式-观察者模式/事件委托(代码片段)

观察者模式观察者模式又称发布-订阅模式,其定义了一种多对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能自动更新自己。 观察者模式的... 查看详情

java之外观模式(大话设计模式)

外观设计模式,很多人都已经使用过,只是不知其名,一般一个很nice的系统,模块化做的都很不错,这样如果新来一个业务,只需要把各个模块组装起来就可以满足新的业务,从程序的角度来说,就是我们只需要开一个类,然... 查看详情

java设计模式之观察者模式

    观察者模式是对象的行为模式,又叫做发布-订阅-模式、模型-视图-模式、源-监听器-模式或者从属者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象... 查看详情

折腾java设计模式之观察者模式

观察者模式Defineaone-to-manydependencybetweenobjectswhereastatechangeinoneobjectresultsinallitsdependentsbeingnotifiedandupdatedautomatically.直译过来就是,定义对象间的一对多依赖关系,当一个对象的状态变更会自动通知和更新所有依赖项。像发布/订阅... 查看详情

java设计模式之观察者模式

观察者模式介绍:观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计... 查看详情