PHP简单装饰器模式实现与用法示例
PHP装饰器模式:实现与用法详解
PHP装饰器模式是一种在不影响原有类结构的情况下,动态地给类添加额外功能的设计模式。本文将通过具体实例,详细讲解PHP装饰器模式的原理、实现与用法。
一、基础类定义
我们定义一个武器基类`Weapon`,包含两个抽象方法`descriptions()`和`cost()`,用于描述武器的属性和价格。
```php
abstract class Weapon {
abstract public function descriptions();
abstract public function cost();
}
```
二、具体武器类实现
接着,我们创建具体的武器类,如`Glave`(剑)、`Knife`()和`Axe`(斧),并分别实现基类中的抽象方法。
```php
class Glave extends Weapon {
public function descriptions() {
return 'Glave';
}
public function cost() {
return "100";
}
}
```
三、属性类(装饰器)
然后,我们定义属性类`Property`,作为装饰器类。它继承自武器基类,并包含对原有武器对象的引用,以及额外的属性和描述。在构造方法中,我们将原有武器对象传递给属性类。
```php
class Property extends Weapon {
protected $_weapon; // 原有武器对象
protected $_price; // 属性价格
protected $_descriptions; // 属性描述
public function __construct(Weapon $weapon) {
$this->_weapon = $weapon; // 初始化原有武器对象
}
public function cost() { // 计算总价格
return $this->_weapon->cost() + $this->_price;
}
public function descriptions() { // 组合描述信息
return $this->_weapon->descriptions() . $this->_descriptions;
}
}
```
四、具体属性实现
接下来,我们创建具体的属性类,如`Strength`、`Agility`和`Intellect`,分别代表力量、敏捷和智力属性。这些属性类继承自属性类(装饰器),并定义自己的价格描述。
例如:`Strength`类的实现如下:
```php
class Strength extends Property { // 继承自Property类(装饰器)
protected $_price = 30; // 定义价格属性值
编程语言
- PHP简单装饰器模式实现与用法示例
- PHP不用第三变量交换2个变量的值的解决方法
- jQuery+css实现非常漂亮的水平导航菜单效果
- 使用 vue 实现灭霸打响指英雄消失的效果附demo
- JS实现超简单的鼠标拖动效果
- php计算给定日期所在周的开始日期和结束日期示
- php外部执行命令函数用法小结
- Ajax创建XMLHttp对象的完美兼容性代码
- ionic由于使用了header和subheader导致被遮挡的问题的
- php实现数组中索引关联数据转换成json对象的方法
- ajax实现上传图片保存到后台并读取的实例
- MySQL实现两张表数据的同步
- Js删除数组中某一项或几项的几种方法(推荐)
- 对Vue- 动态元素属性及v-bind和v-model的区别详解
- smarty中改进truncate使其支持中文的方法
- webstorm配置支持nodejs并自动补全的方法