php设计模式之适配器模式实例分析【星际争霸游戏案例】


Posted in PHP onApril 07, 2020

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

星际的很多兵种,都有至少一项特殊技能。而且有些兵种的技能是相同的,比如虫族部队都会恢复血。

如果按照一般的思路,把技能的操作和控制作为方法,放在每个兵种的定义类来实现,代码会重复,也不容易修改。

那我们就会考虑用继承的办法,比如我们可以设计一个虫族的基类,里面有受伤后血恢复的方法。

在设计刺蛇(Hydralisk,口水兵)的时候,我们可以让刺蛇类继承虫族基类。

但是刺蛇是可以研发钻地的,而钻地不是刺蛇独有的功能,是虫族地面部队都有的特点,我们也要把钻地作为公共基类。

问题出来了,我们不能同时让刺蛇类继承两个类,这是php不允许的。

待解决的问题:如何混合重用两个类,

思路:继承一个类,把新建其中一个类的对象作为属性,然后通过这个属性来调用第二个类的方法。

适配器(Adapter)模式示例:

<?php
  //虫族基类
  class Zerg
  {
    //血
    public $blood;

    //恢复血的方法
    public function restoreBlood()
    {
      //自动逐渐恢复兵种的血
    }
  }

  //钻地的类
  class Burrow
  {
    //钻地的方法
    public function burrowOperation()
    {
      //钻地的动作,隐形等等
      echo '我钻地了';
    }
  }

  //刺蛇的类
  class Hydralisk extends Zerg
  {
    //把一个属性来存放钻地对象
    public $burrow;

    //构造方法,因为php不允许默认值采用对象,所以通过初始化赋值给$burrow
    public function __construct()
    {
      $this->burrow=new Burrow();
    }

    //钻地的方法
    public function burrowOperation()
    {
      //调用钻地属性存放的对象,使用钻地类的方法
      $this->burrow->burrowOperation();
    }
  }

  //制造一个刺蛇
  $h1 = new Hydralisk();

  //让他钻地
  $h1->burrowOperation();

  //运行输出:我钻地了

?>

用途总结:适配器模式使得一个类可以同时使用两个基础类的功能,跳出了单纯继承的限制。有效的重用多各类。

实现总结:让新的类去继承一个基础类,然后通过新类的属性来存放其他类的对象,通过这些对象来调用其他类的方法.

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

PHP 相关文章推荐
php类
Nov 27 PHP
E路文章系统PHP
Dec 11 PHP
PHP源代码数组统计count分析
Aug 02 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
解析MySql与Java的时间类型
Jun 22 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
Yii2框架中一些折磨人的坑
Dec 15 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 #PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 #PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 #PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 #PHP
Laravel 5+ .env环境配置文件详解
Apr 06 #PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 #PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 #PHP
You might like
Terran魔法科技
2020/03/14 星际争霸
生成php程序的php代码
2008/04/07 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python中join()方法介绍
2018/10/11 Python
python中import与from方法总结(推荐)
2019/03/21 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
成教自我鉴定
2013/10/27 职场文书
4s店机修工岗位职责
2013/12/20 职场文书
cf收人广告词大全
2014/03/14 职场文书
公司开除员工通知
2015/04/22 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
导游词之天津盘山
2019/11/01 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS