5.使用中介者模式和责任链模式优化坦克大战代码-设计模式之坦克大战

本文通过复习中介者模式和责任链模式,分析坦克大战游戏中存在的耦合问题,并提出解决方案。利用中介者模式建立碰撞检测类,将游戏对象之间的碰撞逻辑解耦,再结合责任链模式,创建不同的碰撞检测节点,形成处理链,以实现代码的开闭原则。文章附带了当前代码和优化后的代码示例链接。
摘要由CSDN通过智能技术生成

目录

 

1、概述

(1)首先复习一下中介者模式:

(2)然后复习一下责任链模式:

(3)坦克大战中的应用场景

2、代码

(1)现在的代码

(2)优化后的代码


1、概述

(1)首先复习一下中介者模式:

https://blog.csdn.net/phs999/article/details/107300046

通过实现一个中介类,实现了同类对象的解耦。比如聊天室、学习群、消息队列等等场景。

(2)然后复习一下责任链模式:

https://blog.csdn.net/phs999/article/details/107588245

责任链模式就是一个“责任节点”串起来的链,每个责任节点不仅要完成当前节点的审核或校验逻辑,同时也要指定下一个责任节点,类似链表数据结构。当然并不是所有责任节点都要进行审核或校验逻辑,有的场景是需要责任链中的其中一个节点处理校验,而链上前面的节点,只负责流转指定“下一个”。而所谓的“责任”,也就是对于请求的处理或者对于信息的校验审核。

(3)坦克大战中的应用场景

目前的代码版本中,游戏对象(子弹、坦克等)之间的碰撞是在游戏对象类中实现的,比如子弹与坦克碰撞的判断写在了Bullet类中。但是一旦要新增游戏对象或新增新的碰撞逻辑检测,就要对这些游戏对象类进行修改。比如我新增了一个墙的障碍物类,坦克和子弹都要新增与墙的碰撞检测,这个时候,对原来代码的改动较大。所以我们可以考虑新建一个碰撞检测的中介类(中介者模式,专门负责碰撞检测的逻辑,游戏对象之间不会再因为碰撞检测逻辑而产生耦合。

为了将游戏对象统一起来,使他们统一继承抽象类GameObject,则接下来的碰撞检测就都是游戏对象之间的碰撞检测。

而不同的游戏对象之间的碰撞检测逻辑和碰撞之后的处理是不一样的,比如坦克之间的碰撞、坦克与子弹的碰撞。

那我们可以针对不同的碰撞检测场景,创建不同的碰撞检测类。最后将这些碰撞检测类串起来,就是责任链模式了。每个碰撞检测类都是一个责任链的节点。

2、代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值