PHP设计模式—装饰器模式
发布时间:2020-12-13 21:24:27 所属栏目:PHP教程 来源:网络整理
导读:? 定义: 装饰器模式(Decorator): 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器比生成子类更加灵活。 ? 结构: Component: 定义一个对象接口,可以给这些对象动态地添加职责。 ConcreteComponent: 定义了一个具体的对象,也可以给这个
? 定义:装饰器模式(Decorator):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器比生成子类更加灵活。 ?结构:
?代码实例:这里以一个游戏角色为例,角色本身自带基础攻击属性,也可以通过额外的武器装备增加属性值。这里的装备武器就是动态的给角色添加额外的职责。 /** * 角色,抽象类 * Class Role */ abstract class Role { * * @return mixed */ public function getName(); getAggressivity(); } 2、武器Arms.php,对应ConcreteComponent * * 武器,继承抽象类 * Class Arms class Arms extends* * 基础攻击力 * @var int private $aggressivity = 100; * * @return string getName() { // TODO: Implement getName() method. return '基础攻击值'; } * * @return int getAggressivity() { TODO: Implement getAggressivity() method. return $this->aggressivity; } } 3、装饰抽象类RoleDecorator.php,对应Decorator * * 装饰抽象类 * Class RoleDecorator class RoleDecorator * * @var Role protected $role* * RoleDecorator constructor. * @param Role $role function __construct(Role ) { $this->role = ; } } 4、剑Sword.php,对应ConcreteDecorator * * 剑,具体装饰对象,继承装饰抽象类 * Class Sword class Sword RoleDecorator { * * @return mixed|string $this->role->getName() . '+斩妖剑'* * @return int|mixed $this->role->getAggressivity() + 200; } } 5、枪Gun.php,对应ConcreteDecorator * * 枪,具体装饰对象,继承装饰抽象类 * Class Gun class Gun $this->role->getName() . '+震天戟'$this->role->getAggressivity() + 150; } } 6、调用 基础攻击值 $arms = new Arms(); echo $arms->getName(); $arms->getAggressivity() . '<br>'; 基础攻击值+斩妖剑 $sword = new Sword( Arms()); $sword->$sword->getAggressivity() . '<br>' 基础攻击值+震天戟 $gun = new Gun($gun->$gun->getAggressivity() . '<br>' 基础攻击值+斩妖剑+震天戟 $person = Arms())); $person->$person->getAggressivity() . '<br>'; 7、结果: 基础攻击值100 基础攻击值+斩妖剑300 基础攻击值+震天戟250 基础攻击值+斩妖剑+震天戟450 ?总结:
? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |