php设计模式之代理模式分析【星际争霸游戏案例】
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-21 09:56:00 浏览: 评论:0
本文实例讲述了php设计模式之代理模式,分享给大家供大家参考,具体如下:
星际争霸如果是多人对战模式,就会遇到一个问题:如何降低网络延时和负担。
为了确保数据的一致性,我们应该将每个玩家的发生变化的数据不停的传送到开地图的主机进行保存,一旦任何某个玩家的客户机读取数据,就必须向主机请求数据。
尽管大多数数据是交互性的,即使某个玩家的人口也是这样的,如果某个敌人的部队杀死了这个玩家的一个部队,立即影响了他的人口数量。
不过水晶矿和气矿有所不同,除了玩家自己的建造操作和农民采集,别的玩家影响不了这个数据。
所以我们考虑在客户机也放一个数据存储,玩家改变或者读取他的资源的时候,先操作本机数据,再通知主机。
代理(Proxy)模式示例:
为了方便,假设客户机已经通过远程包含或其他方法获取了主机上的php代码,它的代码如下:
- <?php
- //客户机和主机操作数据时共同要实现的借口
- interface iDataProcess
- {
- //获取数据的方法,$ID表示玩家的ID,$dataName表示获取的数据的名称
- public function getData($ID, $dataName);
- //改变数据的方法,$ID表示玩家的ID,$dataName表示要改变的数据的名称,$dataValue表示改变后的数据的值
- public function updateData($ID, $dataName, $dataValue);
- }
- //主机操作数据的类
- class DataProcess implements iDataProcess
- {
- // 获取数据的方法,$ID表示玩家的ID,$dataName表示获取的数据的名称
- public function getData($ID, $dataName)
- {
- //操作数据库之类的代码
- }
- //改变数据的方法,$ID表示玩家的ID,$dataName表示要改变的数据的名称,$dataValue表示改变后的数据的值
- public function updateData($ID, $dataName, $dataValue)
- {
- //操作数据库之类的代码
- }
- }
- //客户机操作数据的类,也就是代理类
- class ProxyDataProcess implements iDataProcess
- {
- //主机操作数据的对象
- private $dataProcess;
- //构造函数
- public function __construct()
- {
- $this->dataProcess = new DataProcess();
- }
- // 获取数据的方法,$ID表示玩家的ID,$dataName表示获取的数据的名称
- public function getData($ID, $dataName)
- {
- //判断是否直接向主机请求
- switch ($dataName)
- {
- //如果查询水晶矿
- case 'ore':
- //直接从客户机保存的数据读取,详细代码略过
- break;
- //如果查询气矿
- case 'gas':
- //直接从客户机保存的数据读取,详细代码略过
- break;
- default:
- $this->dataProcess->getData($ID, $dataName);
- break;
- }
- }
- //改变数据的方法,$ID表示玩家的ID,$dataName表示要改变的数据的名称,$dataValue表示改变后的数据的值
- public function updateData($ID, $dataName, $dataValue)
- {
- //和读取的思路类似,如果是水晶矿或气矿,就先写入客户机的数据存储,再告诉主机修改
- }
- }
- //新建一个客户机处理数据的对象
- $proxyDataProcess = new ProxyDataProcess();
- //假如显示本玩家自己的气矿剩余数量
- $proxyDataProcess->getData(3, 'gas');
- ?>
用途总结:代理模式可以将让客户操作一个代理的类,进行一些降低资源消耗的工作,也可以完成比如权限验证的工作。
实现总结:需要一个接口来规定实际和代理操作类都必须实现的方法,比如上面iDataProcess,另外就是实际处理的类,比如上面DataProcess,以及让客户使用的代理操作类,比如上面的ProxyDataProcess。其实代理模式可以有多种用法,这里限于篇幅,只讨论了降低数据操作的负荷。
Tags: php代理模式 php星际争霸
- 上一篇:php设计模式之享元模式分析【星际争霸游戏案例】
- 下一篇:最后一页
相关文章
- ·php面向对象基础详解【星际争霸游戏案例】(2022-02-07)
- ·php设计模式之工厂方法模式分析【星际争霸游戏案例】(2022-02-07)
- ·php设计模式之抽象工厂模式分析【星际争霸游戏案例】(2022-02-07)
- ·php设计模式之建造器模式分析【星际争霸游戏案例】(2022-02-07)
- ·php设计模式之中介者模式分析【星际争霸游戏案例】(2022-02-21)
- ·php设计模式之享元模式分析【星际争霸游戏案例】(2022-02-21)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)