该文章属于《编程中的那些经典套路——设计模式汇总》系列,而且如下内容基于语言PHPphp
今天咱们来谈谈装饰器模式,想象一个场景:编程
有一篇帖子segmentfault
帖子的内容我写好了,设计模式
三个部门的人员想控制它.this
编辑组要添导读文字设计
审核组要去敏感字code
市场部想在末尾加点广告对象
我只是一篇帖子,由大家来处置吧。get
此时如何处理呢?如何写出符合面向对象三特性五原则的代码呢?由此引出装饰器模式就发挥做用了it
一言不合来看看代码:
装饰器模式.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),咱们须要对文章变量进行润色,咱们经过外部的耦合调用,最终返回一篇润色后的文章。
这就是装饰器模式。