该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP
今天我们来谈谈装饰器模式,想象一个场景:
有一篇帖子
帖子的内容我写好了,
三个部门的人员想控制它.
编辑组要添导读文字
审核组要去敏感字
市场部想在末尾加点广告
我只是一篇帖子,由你们来处置吧。
此时如何处理呢?如何写出符合面向对象三特性五原则的代码呢?由此引出装饰器模式就发挥作用了
一言不合来看看代码:
装饰器模式.php
<?php
//基本文章类
class BaseArt{
//声明文章对象与基本文章
protected $ObjArt,$content;
//构造方法传最基本的文章
public function __construct($content){
$this->content = $content;
}
public function decorator(){
return $this->content;
}
}
//编辑类
class Editor extends BaseArt{
public function __construct($ObjArt){
$this->ObjArt = $ObjArt;
$this->decorator();
}
public function decorator(){
return $this->content = $this->ObjArt->content. '#编辑已添加导读';
}
}
//审核组类
class Auditor extends BaseArt{
public function __construct($ObjArt){
$this->ObjArt = $ObjArt;
$this->decorator();
}
public function decorator(){
return $this->content = $this->ObjArt->content. '#审核组已阅';
}
}
//市场部类
class Market extends BaseArt{
public function __construct($ObjArt){
$this->ObjArt = $ObjArt;
$this->decorator();
}
public function decorator(){
return $this->content = $this->ObjArt->content. '#市场部已加广告';
}
}
$Art = new Market(new Auditor (new Editor (new BaseArt('#基本文章'))));
print_r($Art->decorator());
?>
自始至终所有类(编辑组,审核组,市场部)操作的都是一个变量(文章:$content),我们需要对文章变量进行润色,我们通过外部的耦合调用,最终返回一篇润色后的文章。
这就是装饰器模式。