欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-16 19:38:02
本文实例讲述了php设计模式之适配器模式。分享给大家供大家参考,具体如下:星际的很多兵种,都有至少一项特殊技能。而且有些兵种的技能是相同的,比如虫族部队都会恢复血。如果按照一般的思路,把技能的操作和控...

本文实例讲述了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();

  //运行输出:我钻地了

?>

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

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