志在指尖
用双手敲打未来

C#设计模式学习观察者模式

一、导言
今日咱们要讲行为型规划形式的第四个形式–观察者形式,先从姓名上来看。观察者形式能够了解为既然有“观察者”,那肯定就有“被观察者”了。“观察者”监视着“被观察者”,假如“被观察者”有所行动,“观察者”就会做出相应的动作来回应。听起来是不是有点像“谍战”的滋味?比方“谍影重重”那类优异的影片。观察者形式在现实生活中,实例其实是许多的,比方:八九十年代咱们订阅的报纸,咱们会定期收到报纸,因为咱们订阅了。银行能够给储户发手机短信,也是观察者形式很好的运用的比如,因为咱们订阅了银行的短信事务,当咱们账户余额发生改变就会收到告诉。还有许多,我就不一一列举了,发挥咱们的想象吧。好了,接下来,就让咱们看看该形式详细是怎么完成的吧。c#
二、观察者形式介绍
观察者形式:英文名称–ObserverPattern;分类–行为型。
2.1、动机(Motivate)
在软件构建过程中,咱们需要为某些方针建立一种“告诉依靠联系”–一个方针(方针方针)的状况发生改动,一切的依靠方针(观察者方针)都将得到告诉。假如这样的依靠联系过于紧密,将使软件不能很好地抵挡改变。运用面向方针技术,能够将这种依靠联系弱化,并构成一种安稳的依靠联系,从而完成软件体系结构的松耦合。
2.2、目的(Intent)
界说方针间的一种一对多的依靠联系,以便当一个方针的状况发生改动时,一切依靠于它的方针都得到告诉并自动更新。——《规划形式》GoF
2.3、结构图
2.4、形式的组成
能够看出,在观察者形式的结构图有以下人物:
1)笼统主题人物(Subject):笼统主题把一切观察者方针的引用保存在一个列表中,并提供添加和删去观察者方针的操作,笼统主题人物又叫做笼统被观察者人物,一般由笼统类或接口完成。
2)笼统观察者人物(Observer):为一切详细观察者界说一个接口,在得到主题告诉时更新自己,一般由笼统类或接口完成。
3)详细主题人物(ConcreteSubject):完成笼统主题接口,详细主题人物又叫做详细被观察者人物。
4)详细观察者人物(ConcreteObserver):完成笼统观察者人物所要求的接口,以便使本身状况与主题的状况相协调。
2.5、观察者形式的详细完成
观察者形式在显现生活中也有相似的比如,比方:咱们订阅银行短信事务,当咱们账户发生改动,咱们就会收到相应的短信。相似的还有微信订阅号,今日咱们以订阅银行短信事务为例来讲讲观察者形式的完成,完成代码如下:
ViewCode
运行结果如下:
观察者形式有些费事的当地就是关于状况的处理,咱们能够细细领会一下。形式还是要多写多练习,里边的道理就不难了解了。
三、观察者形式的完成关键
运用面向方针的笼统,Observer形式使得咱们能够独立地改动方针与观察者(面向方针中的改动不是指改代码,而是指扩展、子类化、完成接口),从而使二者之间的依靠联系到达松耦合。方针发送告诉时,无需指定观察者,告诉(能够携带告诉信息作为参数)会自动传达。观察者自己决定是否需要订阅告诉,方针方针对此一窍不通。
C#的event中,托付充当了笼统的Observer接口,而提供事情的方针充当了方针方针。托付是比笼统Observer接口更为松耦合的规划。
3.1、观察者形式的长处
1)观察者形式完成了表明层和数据逻辑层的分离,并界说了安稳的更新音讯传递机制,同时笼统了更新接口,使得能够有各式各样不同的表明层,即观察者。
2)观察者形式在被观察者和观察者之间建立了一个笼统的耦合,被观察者并不知道任何一个详细的观察者,只是保存着笼统观察者的列表,每个详细观察者都契合一个笼统观察者的接口。
3)观察者形式支持广播通信。被观察者会向一切的注册过的观察者发出告诉。
3.2、观察者形式的缺点
1)假如一个被观察者有许多直接和直接的观察者时,将一切的观察者都告诉到会花费许多时间。
2)尽管观察者形式能够随时使观察者知道所观察的方针发送了改变,可是观察者形式没有相应的机制使观察者知道所观察的方针是怎样发生改变的。
3)假如在被观察者之间有循环依靠的话,被观察者会触发它们之间进行循环调用,导致体系崩溃,在运用观察者形式应特别注意这点。
四、.NET中观察者形式的完成
其实在Net里边完成的观察者形式做了一些改动,用托付或许说是事情来完成观察者形式。事情咱们都很明白,能够注册控件的事情,当触发控件的动作时候,
相应的事情就会履行,在事情的履行过程中咱们就能够做相关的提醒事务。这里关于观察者形式在Net里边的完成就不说了,假如咱们不明白,能够多看看相关委托或许事情的相关资料。
五、总结
这个形式结合实例了解是很容易的,形式的运用咱们不能照搬,要了解,当然多多联系和写代码也是必不可少的,咱们运用形式的一向主旨是经过重构和迭代,在咱们的代码中完成相应的形式。

未经允许不得转载:IT技术网站 » C#设计模式学习观察者模式
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载