设计模式
观察者模式,当一个对象状态发送改变时,依赖它的对象全部会收到通知,并自动更新。观察者模式实现了低耦合,非侵入式的通知与更新机制。
设计模式之观察者模式
说实话,这个概念实在是不好理解,初次学习观察者模式的开发者,看到这个概念都是一脸懵逼的感觉,小编也是,如果是光看概念,那绝对领悟不到其中的意思。接下来,咱们一起理解一下何为观察者模式。
首先,什么是当一个对象状态发生改变,说白了就是实例对象方法的调用,也可以理解为事件触发,方法调用完成后也代表状态发生改变,这个时候就会通知依赖此实例对象的其他对象,什么是依赖此对象的其他对象,拿编码来说,就是在此对象中定义一个数组,然后把依赖它的对象给装进去,这些被装进此对象定义的数组中的其他对象就是观察者了,等上述事件触发完成后,循环这个观察者数组调用每个观察者的方法就实现了通知所有观察者,但是这里有一个要求,所有这些被注册到此对象观察者数组中的其他对象必须具有相同的接收通知的成员方法,可以这样做,我们让所有需要依赖此对象的所有对象具有符合标准的属性和方法,接口,定义一个标准接口,这些观察者类都来实现这个标准接口,这样必然就要实现其中的成员方法,通知到观察者后具体观察者会做什么动作,此对象并不关心,这也就实现了解耦。有些小伙伴可能会疑问,观察者对象怎么依赖到此对象中去呢?编码层面解释,在此对象中定义一个注入观察者的方法addobserver(observer),接收对象类型参数,然后在此对象构造方法中调用$this->addObserver(new object());实现观察者的注入,这样以后如果说还要通知其他观察者,只需要在构造方法里面addObserver即可。好了,下面咱们用伪代码和现实例子进行表述。
php
例如:电商公司订单出货,出货后需要更新实物库存,修改订单发货状态。
这里的订单出货仅仅就是一个扫描动作,这个动作完成后代表对象状态发生变化,也就是事件已触发,接下来就需要通知观察者已经出货,每个观察者根据自己的属性做出相应动作。代码如下:
发货出库:
发货出库类
定义观察者接口:
观察者接口
订单发货状态:
订单类
产品减实物库存:
产品类
通过这个例子,就很好理解“观察者模式”,只是在现实中的遇到的问题往往更复杂,这个就需要小伙伴们能够仔细思考,发散思维,最后能够抽丝剥茧,设计出比较好的代码层次和结构。理解这个观察者模式有点像消息里面的订阅模式。每天一点设计模式,让你的代码和思维越来越优化!
设计模式之观察者模式
今天的分享就到这里,喜欢我的内容,欢迎转发~~留言探讨~~
谢谢!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved