php单例模式
原创不去修改已有的类,而是通过创建另外一个装饰器类,通过这个装饰器类去动态的扩展需要修改的内容。
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();
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除