【装饰模式】
装饰模式,又称装饰器模式 或 装饰者模式 或 油漆工模式,通过创建一个“装饰对象”,在不改变原有类和使用继承的情况下,动态地扩展一个对象的功能,比直接生成子类继承更加灵活,可以通过多个不同的具体装饰类,创建多个不同的行为组合。
结构:
- 抽象构件(Component):是一个接口或者抽象类,定义核心的原始对象,用来规范准备接收附加责任的对象。
- 具体构件(ConcreteComponent):实现抽象构件,通过装饰角色为其添加一些职责。
- 抽象装饰角色(Decorator):关联抽象构件,定义装饰器的属性和新的方法,包含具体构件的实例,可以通过其子类扩展具体构件的功能。
- 具体装饰角色(ConcreteDecorator):抽象装饰的具体实现,并给具体构件对象添加附加的责任。
示例:下面以一个订单服务为例,在不改动原有支付方法 payOrder() 的情况下,要求支付成功后给用户增加积分,这里用装饰模式来实现,目的是对 payOrder() 方法进行装饰,扩展功能:
-
订单服务接口 抽象构件 OrderServiceInterface.php :
<?php
namespace app\design08\controller;
//订单服务接口 抽象构件
interface OrderServiceInterface
{//创建订单public function c