一天一个设计模式(10)——装饰器模式
装饰器模式
装饰器模式是为了向一个现有的对象添加新的功能,在不想继承该对象的情况下使用,以避免子类较多的情况。
实例
天气热的时候我们家宝宝要出门玩可以不换衣服直接出门。现在天气凉了,我想要出门前先穿上衣服,回家就脱掉。
首先创建一个孩子玩的接口

/** * Interface Child */ interface Child { public function play(); }
夏天的时候想出去玩直接就出门啦

class MyChild implements Child { public function play() { echo 'Go out!'; } }
创建一个装饰器类

class Decorator implements Child { public $decoratorChild; /** * Decorator constructor. * @param $child Child */ function __construct($child) { $this->decoratorChild = $child; } public function play() { $this->decoratorChild->play(); } }
冬天出门要先穿衣服,回家要脱衣服。

class MyChildNew extends Decorator{ public function first(){ echo "Wear clothes."; } public function last(){ echo "Undress."; } public function play() { $this->first(); parent::play(); $this->last(); } }
执行结果:
$child=new MyChildNew(new MyChild()); $child->play(); //Wear clothes.Go out!Undress.
本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/design10.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2015-06-08 条件修饰词