php 修饰器,PHP设计模式-装饰器

本文通过代码实例介绍了装饰器模式和适配器模式的区别。装饰器模式用于在不修改原有对象的情况下,动态地给对象增加新的功能,而适配器模式则是将两个不兼容的接口连接在一起。文中以鞋类接口为例,展示了如何使用装饰器模式为滑板鞋和运动鞋添加贴标功能,从而实现功能增强。
摘要由CSDN通过智能技术生成

适用性

对现有的对象增加功能

和适配器的区别:适配器是连接两个接口,装饰器是对现有的对象包装

代码示例

/**

* 鞋接口

*/

interface ShoesInterface

{

public function product();

}

/**

* 装饰器抽象类.

*/

abstract class Decorator implements ShoesInterface

{

/**

* 产品生产线对象

*/

protected $shoes;

/**

* 构造函数.

*/

public function __construct(ShoesInterface $shoes)

{

$this->shoes = $shoes;

}

/**

* 生产.

*/

public function product()

{

$this->shoes->product();

}

/**

* 装饰操作.

*/

abstract public function decorate($value);

}

/**

* 贴标装饰器

*/

class DecoratorBrand extends Decorator

{

private $_brand;

/**

* 构造函数

*/

public function __construct(ShoesInterface $phone)

{

$this->phone = $phone;

}

public function __set($name='', $value='')

{

$this->$name = $value;

}

/**

* 生产

*/

public function product()

{

$this->phone->product();

$this->decorate($this->_brand);

}

/**

* 贴标操作

*/

public function decorate($value='')

{

echo "贴上{$value}标志 \n";

}

}

/**

* 滑板鞋实体

*/

class ShoesSkateboard implements ShoesInterface

{

public function product()

{

echo "生产一滑板鞋";

}

}

/**

* 运动鞋实体

*/

class ShoesSport implements ShoesInterface

{

public function product()

{

echo "生产一双球鞋";

}

}

try {

echo "未加装饰器之前:\n";

// 生产运动鞋

$shoesSport = new ShoesSport();

$shoesSport->product();

echo "\n--------------------\n";

echo "加贴标装饰器:\n";

// 初始化一个贴商标适配器

$DecoratorBrand = new DecoratorBrand(new ShoesSport());

$DecoratorBrand->_brand = 'nike';

// 生产nike牌运动鞋

$DecoratorBrand->product();

} catch (\Exception $e) {

echo $e->getMessage();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值