第五章:万剑归宗 - 装饰器模式
V
第五章:万剑归宗 - 装饰器模式 武林秘籍 在编程江湖中,有一门绝世武功名为"万剑归宗",能够将无数剑法融为一体,威力无穷。 而在设计模式中,有一门与之对应的绝学——装饰器模式。 何为装饰器? 装饰器模式,就是动态地给对象添加额外的职责,而不改变其结构。 就像武林中的装备系统,给武器附加各种属性和效果。 武功心法 <?php /** * 万剑归宗 - 装饰器模式 * 层层叠加,威力无穷 */ // 武器接口 interface Weapon { public function attack(); public function getDescription(); } // 具体组件 - 基础武器 class BasicSword implements Weapon { public function attack() { return "剑气攻击"; } public function getDescription() { return "普通长剑"; } } // 装饰器基类 abstract class WeaponDecorator implements Weapon { protected $weapon; public function __construct(Weapon $weapon) { $this->weapon = $weapon; } public function attack() { return $this->weapon->attack(); } public function getDescription() { return $this->weapon->getDescription(); } } // 火焰装饰器 class FireDecorator extends WeaponDecorator { public function attack() { return $this->weapon->attack() . " + 🔥 火焰伤害"; } public function getDescription() { return $this->weapon->getDescription() . " + 火焰附魔"; } } // 冰霜装饰器 class IceDecorator extends WeaponDecorator { public function attack() { return $this->weapon->attack() . " + ❄️ 冰霜伤害"; } public function getDescription() { return $this->weapon->getDescription() . " + 冰霜附魔"; } } // 雷电装饰器 class LightningDecorator extends WeaponDecorator { public function attack() { return $this->weapon->attack() . " + ⚡ 雷电伤害"; } public function getDescription() { return $this->weapon->getDescription() . " + 雷电附魔"; } } // 使用示例 echo "=== 万剑归宗 - 装饰器模式示例 ===\n"; // 创建基础武器 $basicSword = new BasicSword(); echo "基础武器:{$basicSword->getDescription()}\n"; echo "攻击效果:{$basicSword->attack()}\n"; // 添加火焰附魔 $fireSword = new FireDecorator($basicSword); echo "\n火焰附魔后:{$fireSword->getDescription()}\n"; echo "攻击效果:{$fireSword->attack()}\n"; // 添加冰霜附魔 $iceFireSword = new IceDecorator($fireSword); echo "\n冰霜+火焰附魔后:{$iceFireSword->getDescription()}\n"; echo "攻击效果:{$iceFireSword->attack()}\n"; // 添加雷电附魔(万剑归宗!) $ultimateSword = new LightningDecorator($iceFireSword); echo "\n万剑归宗(冰霜+火焰+雷电):{$ultimateSword->getDescription()}\n"; echo "攻击效果:{$ultimateSword->attack()}\n"; // 验证原武器未改变 echo "\n原基础武器未改变:{$basicSword->getDescription()}\n"; echo "攻击效果:{$basicSword->attack()}\n"; ?> 江湖应用 武器强化 - 如同武林中的装备附魔 功能扩展 - 如同武林中的招式叠加 动态配置 - 如同武林中的变化万千 万剑归宗要诀 层层叠加:装饰器可以多层嵌套 灵活扩展:不改变原有对象,动态添加功能 组合自由:可以自由组合不同的装饰器 修炼要点 装饰器接口:与组件接口一致 组合关系:装饰器持有组件对象 透明性:客户端无需关心装饰细节 下回预告:第六章:乾坤大挪移 - 适配器模式 本文章由设计模式武侠传系列发布
阅读更多