首页 > 代码库 > 20. 星际争霸之php设计模式--适配器模式
20. 星际争霸之php设计模式--适配器模式
题记
==============================================================================
本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦!
本文地址:http://www.cnblogs.com/davidhhuan/p/4248208.html
==============================================================================
星际的很多兵种,都有至少一项特殊技能。而且有些兵种的技能是相同的,比如虫族部队都会恢复血。
如果按照一般的思路,把技能的操作和控制作为方法,放在每个兵种的定义类来实现,代码会重复,也不容易修改。
那我们就会考虑用继承的办法,比如我们可以设计一个虫族的基类,里面有受伤后血恢复的方法。
在设计刺蛇(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();?>
用途总结:适配器模式使得一个类可以同时使用两个基础类的功能,跳出了单纯继承的限制。有效的重用多各类。
实现总结:让新的类去继承一个基础类,然后通过新类的属性来存放其他类的对象,通过这些对象来调用其他类的方法.
相关文章:
1. 星际争霸之php面向对象(一)
2. 星际争霸之php面向对象(二)
3. 星际争霸之php设计模式--简单工厂模式
4. 星际争霸之php设计模式--工厂方法模式
5. 星际争霸之php设计模式--抽象工厂模式
6. 星际争霸之php设计模式--建造器模式
7. 星际争霸之php设计模式--中介者模式
8. 星际争霸之php设计模式--享元模式
9. 星际争霸之php设计模式--代理模式
10. 星际争霸之php设计模式--原型模式
11. 星际争霸之php设计模式--备忘模式
12. 星际争霸之php设计模式--模板模式
13. 星际争霸之php设计模式--正面模式
14. 星际争霸之php设计模式--状态模式
15. 星际争霸之php设计模式--策略模式
16. 星际争霸之php设计模式--组合模式
17. 星际争霸之php设计模式--职责链模式
18. 星际争霸之php设计模式--观察者模式
19. 星际争霸之php设计模式--迭代器模式
?20. 星际争霸之php设计模式--适配器模式
20. 星际争霸之php设计模式--适配器模式