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

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

这就是装饰器模式。

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

相关文章
相关标签/搜索