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 相关文章推荐
实现树状结构的两种方法
Oct 09 PHP
PHP simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
自编函数解决pathinfo()函数处理中文问题
Nov 03 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
php中file_exists函数使用详解
May 08 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
关于php unset对json_encode的影响详解
Nov 14 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
附件名前加网站名
2008/03/23 PHP
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
servlet面试题
2012/08/20 面试题
会议开场欢迎词
2014/01/15 职场文书
房地产营销策划方案
2014/02/08 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
残疾人小组计划书
2014/04/27 职场文书
科技活动周标语
2014/10/08 职场文书
村党建工作汇报材料
2014/11/02 职场文书
英语教师个人工作总结
2015/02/09 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery