编程中的那些套路——关于装饰器模式

339 查看

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言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),我们需要对文章变量进行润色,我们通过外部的耦合调用,最终返回一篇润色后的文章。

这就是装饰器模式。

该文章属于《编程中的那些经典套路——设计模式汇总》系列