装饰模式: 顾名思义,装饰模式是一种对对象数据的屡次过滤,就像装饰同样, 一层层的修饰, 获取满意的结果。 装饰模式共分为两个部分: 1: 装饰者: 在这个接口接口下面的类和方法用以对数据进行修饰(即对数据进行过滤修改) 2: 被装饰者: 这个就是要被过滤的数据接口对象
炒菜以前要对买来的菜进行拣菜, 洗菜等操做。这个就相似于装饰操做, 装饰者就是洗净的过程操做, 被装饰者就是菜。
//装饰者 abstract class Decorator { //装饰操做 abstract function process(Cai $cai); } class XiCai extends Decorator { public function process(Cai $cai) { echo '这是个洗菜操做。<br />'; } } //被装饰者 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 '这是个拣菜操做。<br />'; parent::process($cai); //进行下一步过滤 } } //泡菜操做 class PaoCai extends DecorateActor { public function process(Cai $cai) { echo '这是个浸泡操做。<br />'; parent::process($cai); //进行下一步过滤 } } $cai = new QingCai(); $process = new JianCai(new PaoCai(new XiCai($cai))); $process->process($cai);
这是个拣菜操做。 这是个浸泡操做。 这是个洗菜操做。
总结: 当咱们须要对数据进行过滤的时候, 装饰模式能够成为你的选择this