php 设计模式 之 装饰模式

来源:互联网 发布:平凡之路 知乎 编辑:程序博客网 时间:2024/05/17 05:46

概念:

装饰模式: 顾名思义,装饰模式是一种对对象数据的多次过滤,就像装饰一样, 一层层的修饰, 获取满意的结果。装饰模式共分为两个部分: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);

结果:

这是个拣菜操作。这是个浸泡操作。这是个洗菜操作。

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

0 0
原创粉丝点击