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 相关文章推荐
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
PHP生成二维码的两个方法和实例
Jul 01 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
php和redis实现秒杀活动的流程
Jul 17 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
laravel框架的安装与路由实例分析
Oct 11 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
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
js实现时间日期校验
2020/05/26 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
python实现扫描ip地址的小程序
2019/04/16 Python
Django框架模板的使用方法示例
2019/05/25 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
化学实验员岗位职责
2013/12/28 职场文书
小组合作学习反思
2014/02/18 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
员工保密承诺书
2014/05/28 职场文书
道歉信怎么写
2015/05/12 职场文书
清明节随笔
2015/08/15 职场文书
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js