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 相关文章推荐
多文件上载系统完整版
Oct 09 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
如何使用php实现评委评分器
Jul 31 PHP
php实现递归的三种基本方式
Jul 04 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 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 FPDF类库应用实现代码
2009/03/20 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php实现源代码加密的方法
2015/07/11 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
python 通过exifread读取照片信息
2020/12/24 Python
教师对学生的评语
2014/04/28 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
Golang map映射的用法
2022/04/22 Golang