php设计模式之中介者模式分析【星际争霸游戏案例】


Posted in PHP onMarch 23, 2020

本文实例讲述了php设计模式之中介者模式。分享给大家供大家参考,具体如下:

星际的升级系统做得比较平衡,不过由于不少兵种和建筑的制造都需要有相关的科技建筑,所以关系比较复杂。
比如一个科学站造出来后,所有的飞机场都可以建造科技球了,但是一旦一个科学站被摧毁,就要看是否还有科学站,否则就得让所有的飞机场都不能造科技球。
我们可以用上次说的观察者模式解决问题,不过由于星际里面的升级相关比较多,似乎比较麻烦。
其实从实质来讲,任何升级一般只要知道某种建筑是否存在就行了,因此我们不必让他们多对多联系,设置一个中介者就行了。
这就好像我们不管买什么东西,到超市就可以了,而厂家也只要和超市联系,不必和我们每个消费者直接接触。

待解决的问题:不要让各个建筑互相联系,减少复杂程度。

思路:设置中介者,每次遇到制造科技相关的东西,询问中介者。

中介者(Mediator)模式示例:

<?php
  //中介者
  class Mediator
  {
    //存放科技建筑的数量,为了简单说明,用静态属性,其实也可以让各个对象来处理
    public static $techBuilding;
    //根据参数$techBuildingName代表的建筑名称,返回是否存在相应的科技建筑,为了简单说明,用静态属性
    public static function isTechAllow ($techBuildingName)
    {
      //如果科技建筑数量大于零,就返回true,否则返回false
      return self::$techBuilding[$techBuildingName]>0;
    }
    //一旦科技建筑造好了或者被摧毁,调用这个方法,参数$techBuildingName代表建筑名称,$add为布尔值,true表示增加(建造),false代表减少(摧毁)
    public static function changeTech ($techBuildingName, $add)
    {
      //建造
      if ($add)
      {
        //增加数量
        self::$techBuilding[$techBuildingName]++;
      }
      else
      {
        //减少数量
        self::$techBuilding[$techBuildingName]--;
      }
    }
  }
  //科技站类
  class ScienceFacility
  {
    //构造方法
    public function __construct()
    {
      Mediator::changeTech('ScienceFacility', true);
    }
    //析构方法
    public function __destruct()
    {
      Mediator::changeTech('ScienceFacility', false);
    }
  }
  //飞机场类
  class Starport
  {
    //制造科技球的方法
    public function createScienceVessel ()
    {
      //询问中介者,决定是否能制造科技球
      echo Mediator::isTechAllow('ScienceFacility') ? '可以制造科技球' : '不能制造科技球';
    }
  }
  //造一个科技站
  $scienceFacility1 = new ScienceFacility();
  //再造一个科技站
  $scienceFacility2 = new ScienceFacility();
  //造一个飞机场
  $starport = new Starport();
  //建造科技球,结果是能够
  $starport->createScienceVessel();
  echo "<br/>";
  //一个科技站被摧毁
  unset($scienceFacility1);
  //这时建造科技球,结果是能够,因为还有一个科技站
  $starport->createScienceVessel();
  echo "<br/>";
  //另一个科技站被摧毁
  unset($scienceFacility2);
  //这时建造科技球,结果是不行
  $starport->createScienceVessel();
?>

运行结果:

可以制造科技球
可以制造科技球
不能制造科技球

用途总结:中介者模式可以减少各个对象的通讯,避免代码相互关联。

实现总结:中介者模式比较灵活,一般只要有中介者类和需要被协调的类,具体设计看遇到的问题。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php下载远程文件类(支持断点续传)
Nov 14 PHP
PHP的SQL注入实现(测试代码安全不错)
Feb 27 PHP
php 数组的一个悲剧?
May 11 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
laravel 时间格式转时间戳的例子
Oct 11 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 PHP
PDO实现学生管理系统
Mar 21 #PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 #PHP
YII2框架使用控制台命令的方法分析
Mar 18 #PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 #PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 #PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 #PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 #PHP
You might like
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
深入认识javascript中的eval函数
2009/11/02 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
Django的分页器实例(paginator)
2017/12/01 Python
Python for循环生成列表的实例
2018/06/15 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
pycharm的python_stubs问题
2020/04/08 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
自荐信结尾
2013/10/27 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2014年标准化工作总结
2014/12/17 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
单位实习介绍信
2015/05/05 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python