快捷搜索:

php设计模式之代理模式分析【星际争霸游戏案例

本文实例讲述了php设计模式之代理模式。分享给大年夜家供大年夜家参考,详细如下:

星际争霸假如是多人对战模式,就会碰到一个问题:若何低落收集延时和包袱。

为了确保数据的同等性,我们应该将每个玩家的发生变更的数据不绝的传送到开舆图的主机进行保存,一旦任何某个玩家的客户机读取数据,就必须向主机哀求数据。

只管大年夜多半数据是交互性的,纵然某个玩家的人口也是这样的,假如某个对头的部队杀逝世了这个玩家的一个部队,急速影响了他的人口数量。

不过水晶矿和善矿有所不合,除了玩家自己的建造操作和农夷易近采集,其余玩家影响不了这个数据。

以是我们斟酌在客户机也放一个数据存储,玩家改变或者读取他的资本的时刻,先操作本机数据,再看护主机。

代理(Proxy)模式示例:

为了方便,假设客户机已经经由过程远程包孕或其他措施获取了主机上的php代码,它的代码如下:

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。着实代理模式可以有多种用法,这里限于篇幅,只评论争论了低落数据操作的负荷。

PHP、、、、、及

盼望本文所述对大年夜家PHP法度榜样设计有所赞助。

您可能还会对下面的文章感兴趣: