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 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
php新建文件自动编号的思路与实现
Jun 27 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
php图片缩放实现方法
Feb 20 PHP
php实现上传图片文件代码
Jul 19 PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
PHP加密技术的简单实现
Sep 04 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP获取HTTP body内容的方法
Dec 31 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
php合并js请求的例子
2013/11/01 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
详解Vue方法与事件
2017/03/09 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
python如何在循环引用中管理内存
2018/03/20 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
学期自我鉴定范文
2013/10/01 职场文书
计算机系毕业生推荐信
2013/11/06 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
医德医魂心得体会
2014/09/11 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
资金申请报告范文
2015/05/14 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
《水上飞机》教学反思
2016/02/20 职场文书