当前位置:首页 > PHP教程 > php面向对象 > 列表

php设计模式之适配器模式实例分析【星际争霸游戏案例】

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-26 08:23:02 浏览: 评论:0 

本文实例讲述了php设计模式之适配器模式,分享给大家供大家参考,具体如下:

星际的很多兵种,都有至少一项特殊技能,而且有些兵种的技能是相同的,比如虫族部队都会恢复血。

如果按照一般的思路,把技能的操作和控制作为方法,放在每个兵种的定义类来实现,代码会重复,也不容易修改。

那我们就会考虑用继承的办法,比如我们可以设计一个虫族的基类,里面有受伤后血恢复的方法。

在设计刺蛇(Hydralisk,口水兵)的时候,我们可以让刺蛇类继承虫族基类。

但是刺蛇是可以研发钻地的,而钻地不是刺蛇独有的功能,是虫族地面部队都有的特点,我们也要把钻地作为公共基类。

问题出来了,我们不能同时让刺蛇类继承两个类,这是php不允许的。

待解决的问题:如何混合重用两个类,

思路:继承一个类,把新建其中一个类的对象作为属性,然后通过这个属性来调用第二个类的方法。

适配器(Adapter)模式示例:

  1. <?php 
  2.   //虫族基类 
  3.   class Zerg 
  4.   { 
  5.     //血 
  6.     public $blood
  7.  
  8.     //恢复血的方法 
  9.     public function restoreBlood() 
  10.     { 
  11.       //自动逐渐恢复兵种的血 
  12.     } 
  13.   } 
  14.  
  15.   //钻地的类 
  16.   class Burrow 
  17.   { 
  18.     //钻地的方法 
  19.     public function burrowOperation() 
  20.     { 
  21.       //钻地的动作,隐形等等 
  22.       echo '我钻地了'
  23.     } 
  24.   } 
  25.  
  26.   //刺蛇的类 
  27.   class Hydralisk extends Zerg 
  28.   { 
  29.     //把一个属性来存放钻地对象 
  30.     public $burrow
  31.  
  32.     //构造方法,因为php不允许默认值采用对象,所以通过初始化赋值给$burrow 
  33.     public function __construct() 
  34.     { 
  35.       $this->burrow=new Burrow(); 
  36.     } 
  37.  
  38.     //钻地的方法 
  39.     public function burrowOperation() 
  40.     { 
  41.       //调用钻地属性存放的对象,使用钻地类的方法 
  42.       $this->burrow->burrowOperation(); 
  43.     } 
  44.   } 
  45.  
  46.   //制造一个刺蛇 
  47.   $h1 = new Hydralisk(); 
  48.  
  49.   //让他钻地 
  50.   $h1->burrowOperation(); 
  51.  
  52.   //运行输出:我钻地了 
  53.  
  54. ?> 

用途总结:适配器模式使得一个类可以同时使用两个基础类的功能,跳出了单纯继承的限制,有效的重用多各类。

实现总结:让新的类去继承一个基础类,然后通过新类的属性来存放其他类的对象,通过这些对象来调用其他类的方法。

Tags: php适配器模式 php星际争霸游戏

分享到: