php单例模式

原创
小哥 3年前 (2022-11-17) 阅读数 37 #大杂烩

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

interface decorator
{

function before_do();

function after_do();
}

class user
{

private $decorate_arr = array();

/*

  • 装饰对象的eat方法,此方法作为例子
    */
    public function eat()
    {
    $this->before_do();
    echo 开始吃饭
    ;
    $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 先去洗手
;
}

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

// 装饰器2
class decorator2 implements decorator
{

public function before_do()
{
echo 洗完手然后擦一下
;
}

public function after_do()
{
echo 都是真球,不错不错
;
}
}

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

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

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

上一篇:php记录者模式 下一篇:php设计模式
热门