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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
php的ajax简单实例
Feb 27 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php实现微信发红包功能
2018/07/13 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
浅析vue数据绑定
2017/01/17 Javascript
js实现抽奖效果
2017/03/27 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
实例讲解JavaScript预编译流程
2019/01/24 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python读写文件write和flush的实现方式
2020/02/21 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
总经理职责范文
2013/11/08 职场文书
考试不及格检讨书
2014/01/09 职场文书
高中生的自我评价
2014/03/04 职场文书
员工评语范文
2014/12/31 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书