編程中的那些套路——關於裝飾器模式

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

這就是裝飾器模式。

該文章屬於《編程中的那些經典套路——設計模式彙總》系列

相關文章
相關標籤/搜索