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中使用crypt()实现用户身份验证的代码
Sep 05 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
从wamp到xampp的升级之路
Apr 08 PHP
thinkPHP下ueditor的使用方法详解
Dec 26 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
May 18 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
python生成IP段的方法
2015/07/07 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
python递归全排列实现方法
2018/08/18 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
Python OS模块实例详解
2019/04/15 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
空气的环保标语
2014/06/12 职场文书
责任书范本
2014/08/25 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
现实表现证明材料
2015/06/19 职场文书
党员反邪教心得体会
2016/01/15 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL