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获取类中常量,属性,及方法列表的方法
Apr 09 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
PHP的curl函数的用法总结
Feb 14 PHP
PHP中rename()函数的妙用讲解
Feb 28 PHP
PHP 文件上传限制问题
Sep 01 PHP
php服务器的系统详解
Oct 12 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学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
python:print格式化输出到文件的实例
2018/05/14 Python
使用python爬取B站千万级数据
2018/06/08 Python
Django之模型层多表操作的实现
2019/01/08 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Python进行特征提取的示例代码
2020/10/15 Python
什么是数组名
2012/05/10 面试题
师范生自荐信范文
2013/10/06 职场文书
迟到检讨书1000字
2014/01/15 职场文书
六年级数学教学反思
2014/02/03 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
工业设计专业自荐书
2014/06/05 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
Pytest allure 命令行参数的使用
2021/04/18 Python
JavaScript控制台的更多功能
2021/04/28 Javascript
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers