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

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

这就是装饰器模式。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值