php装饰模式与策略结合,php 设计模式 之 装饰模式

概念:

装饰模式: 顾名思义,装饰模式是一种对对象数据的多次过滤,就像装饰一样, 一层层的修饰, 获取满意的结果。

装饰模式共分为两个部分:

1: 装饰者: 在这个接口接口下面的类和方法用以对数据进行修饰(即对数据进行过滤修改)

2: 被装饰者: 这个就是要被过滤的数据接口对象

情景:

炒菜之前要对买来的菜进行拣菜, 洗菜等操作。这个就类似于装饰操作, 装饰者就是洗净的过程操作, 被装饰者就是菜。

实现:

//装饰者

abstract class Decorator

{

//装饰操作

abstract function process(Cai $cai);

}

class XiCai extends Decorator

{

public function process(Cai $cai)

{

echo '这是个洗菜操作。
';

}

}

//被装饰者

abstract class Cai

{

abstract function getGanJingZhi();

}

//青菜

class QingCai extends Cai

{

public function getGanJingZhi()

{

return 2;

}

}

//白菜

class BaiCai extends Cai

{

public function getGanJingZhi()

{

return 3;

}

}

//让已经装饰的装饰者再进行新的装饰,表示多步过滤

abstract class DecorateActor extends Decorator

{

protected $decorator;

public function __construct(Decorator $d)

{

$this->decorator = $d;

}

function process(Cai $cai)

{

$this->decorator->process($cai);

}

}

//拣菜操作

class JianCai extends DecorateActor

{

public function process(Cai $cai)

{

echo '这是个拣菜操作。
';

parent::process($cai); //进行下一步过滤

}

}

//泡菜操作

class PaoCai extends DecorateActor

{

public function process(Cai $cai)

{

echo '这是个浸泡操作。
';

parent::process($cai); //进行下一步过滤

}

}

$cai = new QingCai();

$process = new JianCai(new PaoCai(new XiCai($cai)));

$process->process($cai);

结果:

这是个拣菜操作。

这是个浸泡操作。

这是个洗菜操作。

总结: 当我们需要对数据进行过滤的时候, 装饰模式可以成为你的选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值