题记
==============================================================================
本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦!

本文地址:http://www.cnblogs.com/davidhhuan/p/4248199.html
==============================================================================

星际开地图对战,等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);
?>

用途总结:策略模式可以将不同情况下的算法封装,根据具体的情况调用。

实现总结:需要一个接口,规定算法规范,使用者(比如初始化来)只要调用对应的算法就可以了。

相关文章:

1. 星际争霸之php面向对象(一)

2. 星际争霸之php面向对象(二)

3. 星际争霸之php设计模式--简单工厂模式

4. 星际争霸之php设计模式--工厂方法模式

5. 星际争霸之php设计模式--抽象工厂模式

6. 星际争霸之php设计模式--建造器模式

7. 星际争霸之php设计模式--中介者模式

8. 星际争霸之php设计模式--享元模式

9. 星际争霸之php设计模式--代理模式

10. 星际争霸之php设计模式--原型模式

11. 星际争霸之php设计模式--备忘模式

12. 星际争霸之php设计模式--模板模式

13. 星际争霸之php设计模式--正面模式

14. 星际争霸之php设计模式--状态模式

15. 星际争霸之php设计模式--策略模式

16. 星际争霸之php设计模式--组合模式

17. 星际争霸之php设计模式--职责链模式

18. 星际争霸之php设计模式--观察者模式

19. 星际争霸之php设计模式--迭代器模式

​20. 星际争霸之php设计模式--适配器模式

转载于:https://www.cnblogs.com/davidhhuan/p/4248199.html

15. 星际争霸之php设计模式--策略模式相关推荐

  1. 13. 星际争霸之php设计模式--正面模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  2. 12. 星际争霸之php设计模式--模板模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  3. 4. 星际争霸之php设计模式--工厂方法模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  4. 7. 星际争霸之php设计模式--中介者模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  5. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  6. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  7. [设计模式] ------ 策略模式

    策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...

  8. java 策略模式 促销_java设计模式——策略模式

    一. 定义与类型 定义:针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换.策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能.当代码中 ...

  9. Springboot 使用设计模式- 策略模式

    前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...

最新文章

  1. VNC与RDP的区别
  2. CentOS6网卡静态IP设置
  3. lin通讯从节点同步间隔场_汽车行业必须知识--CAN FD通讯
  4. IIS故障问题(Connections_Refused)分析及处理【转】
  5. Spring之AOP面向切面编程
  6. [Algorithm NLP] 文本深度表示模型——word2vecdoc2vec词向量模型
  7. android 照片拼接长图_齐了!照片排版最好看的App都在这!文末有福利
  8. Windows常用软件推荐
  9. [Openstack] 使用heat模板创建stack
  10. python 局域网服务器_牛逼了!一行Python代码搭建一个局域网服务器
  11. 广东四大姓氏,排名第三的是李姓,你的姓氏排名第几?
  12. 高通WLAN框架学习(36)-- ACS(Auto Channel Selection)自动信道选择
  13. 代码审计-凡诺CMS 2.1文件包含漏洞
  14. 如何写好一篇优秀的硕士毕业论文
  15. (5)多体量子态与统计力学基础
  16. 信息学奥赛一本通:1134:合法C标识符查
  17. 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
  18. Vue3使用axios的配置教程
  19. 南京邮电大学攻防平台密码学之异性相吸
  20. 用php写圣诞祝福页面,2018最美的圣诞节祝福网页【圣诞节祝福语_圣诞节祝福短信】...

热门文章

  1. Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录
  2. EXCEL骨灰级玩家必备技能,学会后年薪翻倍!年轻人耗子尾汁
  3. 01005英制_高精度转换和格式化英制距离(英尺和英寸)
  4. 《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a的木棍,从第二天开始,每天都要将这根木棍锯掉一半
  5. 设任意n个整数存放于数组A[1..n]中,试编写算法,将所有正数排在所有负数前面(要求:算法时间复杂度为O(n))。
  6. nalu模式多slice_H.264中NAL、Slice与frame意思及相互关系
  7. QMainWindow
  8. python多线程调用视频流进行模型处理后播放
  9. 国务院拟出台职工带薪年休假规定
  10. 最大进程线程数 连接数