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怎样调用MSSQL的存储过程
Oct 09 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
Linux编译升级php的详细方法
Nov 04 PHP
php实现zip文件解压操作
Nov 03 PHP
smarty自定义函数用法示例
May 20 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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(3)
2006/10/09 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP中list方法用法示例
2016/12/01 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
JS中style属性
2006/10/11 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Python切片工具pillow用法示例
2018/03/30 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
美国购车网站:TrueCar
2016/10/19 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
小学竞选班干部演讲稿
2014/08/20 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
公务员考察材料范文
2014/12/23 职场文书
幼儿教师辞职信
2015/02/27 职场文书
财务会计求职信范文
2015/03/20 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang