php装饰器模式

不去修改已有的类,而是通过创建另外一个装饰器类,通过这个装饰器类去动态的扩展需要修改的内容。

interface decorator
{

    function before_do();

    function after_do();
}

class user
{

    private $decorate_arr = array();

    /*
     * 装饰对象的eat方法,此方法作为例子
     */
    public function eat()
    {
        $this->before_do();
        echo '开始吃饭<br/>';
        $this->after_do();
    }

    /*
     * 添加装饰器
     */
    public function add_decorate(decorator $decorator)
    {
        $this->decorate_arr[] = $decorator;
    }

    /*
     * 遍历装饰器,调用装饰器方法
     */
    public function before_do()
    {
        foreach ($this->decorate_arr as $decorator) {
            $decorator->before_do();
        }
    }

    /*
     * 遍历装饰器,调用装饰器方法
     */
    public function after_do()
    {
        foreach ($this->decorate_arr as $decorator) {
            $decorator->after_do();
        }
    }
}

// 装饰器1
class decorator1 implements decorator
{

    public function before_do()
    {
        echo '先去洗手<br/>';
    }

    public function after_do()
    {
        echo '吃饱了,是时候看一波球了<br/>';
    }
}

// 装饰器2
class decorator2 implements decorator
{

    public function before_do()
    {
        echo '洗完手然后擦一下<br/>';
    }

    public function after_do()
    {
        echo '都是真球,不错不错<br/>';
    }
}

// 实例化被装饰对象
$user = new user();

// 添加装饰器
$user->add_decorate(new decorator1());
$user->add_decorate(new decorator2());
// 调用方法
$user->eat();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅坞茶坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值