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 和 COM
Oct 09 PHP
如何设置mysql允许外网访问
Jun 04 PHP
比较strtr, str_replace和preg_replace三个函数的效率
Jun 26 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
深入理解PHP中的global
Aug 19 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 PHP
php获取远程文件内容的函数
Nov 02 PHP
PHP如何实现跨域
May 30 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
php探针使用原理和技巧讲解
Sep 17 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
PHP反射基础知识回顾
Sep 10 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
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
执行iframe中的javascript方法
2008/10/07 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
js函数调用的方式
2014/05/06 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
linux下安装easy_install的方法
2013/02/10 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
python 获取网页编码方式实现代码
2017/03/11 Python
python实现发送邮件功能
2017/07/22 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python实现支付宝转账接口
2019/05/07 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
python logging模块的使用
2020/09/07 Python
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
支部鉴定材料
2014/06/02 职场文书
新学期开学标语
2014/06/30 职场文书
教师工作证明范本
2015/06/12 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技