PHP简单装饰器模式实现与用法示例

网络编程 2025-03-24 13:34www.168986.cn编程入门

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; // 定义价格属性值

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by