php设计模式之策略模式实例分析【星际争霸游戏案例】
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-22 11:17:05 浏览: 评论:0
本文实例讲述了php设计模式之策略模式,分享给大家供大家参考,具体如下:
星际开地图对战,等5秒钟进入地图后,每个玩家都会拥有一个基地,几个农民等,还会有初始的人口供给。但这些是根据种族的不同而不同。
待解决的问题:我们需要根据种族的不同,而对玩家进行不同的初始化,最好将这些不同的处理方式封装。
思路:定义初始化的接口,然后制作不同种族的初始化类。
策略模式(Strategy)示例:
为了使代码不至于过长,一部分类的定义不在此写出,如果要调试,请用字符串等方式替代new。
- <?php
- //玩家的类
- class player
- {
- //所属种族
- public $race;
- //部队
- public $army;
- //建筑
- public $building;
- //人口供给
- public $supply;
- //构造函数,设定所属种族
- public function __construct($race)
- {
- $this->race = $race;
- }
- }
- //初始化的接口
- interface initialPlayer
- {
- //制造初始化的部队
- public function giveArmy($player);
- //制造初始化的建筑
- public function giveBuilding($player);
- //初始化人口供给
- public function giveSupply($player);
- }
- //虫族的初始化算法
- class zergInitial implements initialPlayer
- {
- //制造初始化的部队
- public function giveArmy($player)
- {
- //一个Overlord
- $player->army[] = new Overlord();
- //四个虫族农民
- for($i=0; $i<4;$i++)
- {
- $player->army[] = new Drone();
- }
- }
- //制造初始化的建筑
- public function giveBuilding($player)
- {
- //一个基地
- $player->building[] = new Hatchery();
- }
- //初始化人口供给
- public function giveSupply($player)
- {
- //虫族初始人口供给为9
- $player->supply = 9;
- }
- }
- //人族的初始化算法
- class terranInitial implements initialPlayer
- {
- //制造初始化的部队
- public function giveArmy($player)
- {
- //四个人族农民
- for($i=0; $i<4;$i++)
- {
- $player->army[] = new SVC();
- }
- }
- //制造初始化的建筑
- public function giveBuilding($player)
- {
- //一个基地
- $player->building[] = new Hatchery();
- }
- //初始化人口供给
- public function giveSupply($player)
- {
- //人族初始人口供给为10
- $player->supply = 10;
- }
- }
- //初始化的控制类
- class initialController
- {
- //构造函数,参数为玩家的数组
- public function __construct($playerArray)
- {
- foreach ($playerArray as $player)
- {
- switch ($player->race)
- {
- case 'zerg':
- $initialController = new zergInitial();
- break;
- case 'terran':
- $initialController = new terranInitial();
- break;
- }
- $initialController->giveArmy($player);
- $initialController->giveBuilding($player);
- $initialController->giveSupply($player);
- }
- }
- }
- //假设两个虫族,一个人族
- $playerArray = array(
- new player('zerg'),
- new player('zerg'),
- new player('terran'),
- );
- //进行初始化工作
- $initialController = new initialController($playerArray);
- ?>
用途总结:策略模式可以将不同情况下的算法封装,根据具体的情况调用。
实现总结:需要一个接口,规定算法规范,使用者(比如初始化来)只要调用对应的算法就可以了。
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)
- ·php设计模式之代理模式分析【星际争霸游戏案例】(2022-02-21)
- ·php设计模式之原型模式分析【星际争霸游戏案例】(2022-02-22)
- ·php设计模式之备忘模式分析【星际争霸游戏案例】(2022-02-22)
- ·php设计模式之模板模式实例分析【星际争霸游戏案例】(2022-02-22)
- ·php设计模式之正面模式实例分析【星际争霸游戏案例】(2022-02-22)
- ·php设计模式之状态模式实例分析【星际争霸游戏案例】(2022-02-22)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)