委托相关的文章:
帮你理清C#委托、事件、Action、Func
观察者模式
观察者模式它其实是一种写代码的思路,首先本质上和委托的区别就是,一个是思路,一个是具体的数据结构,委托就是一个delegate,是可以直接在代码里声明的,但是观察者模式是通过一些数据结构按照特定的思路写出来,变成观察者模式。
那么到底什么是观察者模式呢?接下来就只能直接上代码了:
创建好接口,我们再来实现 ”被观察者“(Player)对象身上的逻辑:
接下来离观察者模式就还差最后一步了,在观察者的对象脚本上实现ITakeHitObserver接口,并通过AddObserver添加到被观察者的list中,这里我们假设有一个屏幕震动的脚本:
至此,一个简单的观察者模式就实现完了,当然,你还可以根据需求,在别的观察者上实现这个接口,比如受到攻击的时候,血条扣除相应的血量,这里就需要把接口方法加上一个参数传入扣除的血量,有兴趣的同学可以自己试试。
那么观察者模式对比普通的用代码实现有啥好处呢,我们来看看不用观察者模式的时候代码是怎么写的:
这样就会导致player里有一堆引用,并且很多逻辑调用的行数,这样后期维护起来就会变的非常困难,一旦哪个对象需要处理的方法要变,就得去改player的代码,但是用了观察者模式,只需要NotifyObservers()这个方法就可以调用到所有需要处理的地方,不是很爽吗?也实现了解耦。
可以发现整个观察者模式的实现,实际上和委托并没有任何关系,这下能分清观察者模式和委托的区别了吗?
其实还有一种完全解耦合的模式,
发布者订阅者模式
,细心的同学可能发现了,观察者模式实现的时候,在观察者那边还是需要保留一份被观察者的引用,这样在复杂情况下的时候,就有可能会有多个不同被观察者的引用同时存在,当数量多的时候也会出现耦合的情况,那么这个时候发布者订阅者模式的完全解耦就派上用场了,这个模式就是基于委托的事件实现的,有兴趣的同学可以留言给我,如果有人想了解我就会再之后更新一篇发布者订阅者模式的介绍。
看完文章如果觉得对您有帮助的话,麻烦点一波关注哦!~ 有任何疑问和建议也欢迎在下方留言,大家一起探讨交流!谢谢大家!
本文介绍了C#中的委托、事件、Action和Func的概念,并通过实例展示了观察者模式的实现。观察者模式提供了一种解耦的编程思路,与委托不同,它不直接涉及数据结构。文中通过创建接口和对象实现了观察者模式,对比了使用观察者模式前后的代码组织方式,强调了其在代码维护和解耦合上的优势。此外,还提到了发布者订阅者模式作为更彻底的解耦方案。
553

被折叠的 条评论
为什么被折叠?



