游戏设计模式(后续更新)

一、发布订阅模式和观察者模式


前提摘要:学习unity教程时了解到一个设计模式:发布者订阅者模式。感觉与学校讲的观察者模式很相似,在本片文章中阐述一些个人理解,以备后续自己的能力提升。


1、定义一个交互事件 :public event EventHandler OnInteractAction;//交互事件触发

在awake函数中进行行为事件的使用:

gameControl.Player.Interact.performed += Interact_Performed;//行为的事件

+=后直接点击tab键生成一个方法。

?.的意思是:在调用invoke方法之前会判断这个事件(OnInteractAction)是否为空,只有不为空的情况下才会执行invoke函数中的代码。

2、观察者模式

个人理解:在游戏世界中,可能一个物体改变,其他物体也要对应着跟着改变。如:马路上红路灯自己变化,可其余的所有车辆却要跟着变化。一个杀人犯杀了人,导致一大堆警察的出动。


多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。网上的定义


但进行游戏开发中,要注意解耦合和松耦合,所以观察者模式和发布订阅模式,从我个人角度来看,还是有一定的区别的。

在观察者模式中,如果一个系统中的数据有更新,那么这个系统中的方法(负责改变数据)就会被调用,在这个方法中进行数据的更新就可以了,可这样耦合度高,比较麻烦。

解决方法:可以把被观察者看作为一个集合,对被观察者实现一个相同的接口。观察者只需要知道,在通知被观察者时具体使用哪一个通知接口就可以了。

3、发布订阅模式

也许和观察者模式相似,发布者有变化时就会去通知订阅者,但我个人看来并不是这样的。发布者和订阅者之间其实是有一个被忽略的中间人,发布者与订阅者之间是并不认识的。

二者之间的中间人可以不是一个,我们可以把中间人理解成不同的方法。

例如:订阅者1号需要购房,则对接的是房屋的中介。订阅者2号需要吃饭,则对接的是饭店的中介。当发布者产生新的变化时,根据不同的订阅者需求,调用不同的中间人即可,不需要发布者与订阅者沟通(这里要看功能的具体实现)。

4、简单的从三个方面总结一下

(1)观察者模式是观察者与被观察者这两个角色、而发布订阅模式是发布者、中间人、订阅者三个角色。

(2)观察者模式我个人认为是耦合度低,适合松耦合。而发布订阅模式是不存在耦合的情况。


仅个人对知识的理解,如有异议,欢迎指正与讨论。

二、单例模式

1、好处是:可以全局随处调用。坏处是:过度使用代码的耦合度高,容易造成逻辑混乱。

2、示例:public static DialogueUI Instance { get; private set; }

  一般在awake函数中使用  

private void Awake()
{
    Instance = this;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值