該文章屬於《編程中的那些經典套路——設計模式彙總》系列,而且如下內容基於語言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),咱們須要對文章變量進行潤色,咱們經過外部的耦合調用,最終返回一篇潤色後的文章。
這就是裝飾器模式。