设计模式漫谈之装饰模式
我有点像疯子,一个人开了一天酒店,来写这个。我发现我写这个系列,阅读的人很少。也许是程序员不重视思想的东西,也许是感觉我写的很Low,无所谓,我只想告诉同行,程序员重在编程思想,有了编程思想技术的路才能走的更长更远。我很孤独,在自己的小世界里存活着。但是我也要耐着孤独,向更好的方向发展需要孤独,孤独也是一种享受生命的过程。
给一个方法拓展功能,像面向结构中,一个方法里调用多个方法。在面向对象设计中可以是调用基类的方法,子类重写的时候增加功能。再次说下语言层面的东西,类,抽象类,接口的关系,是一种具体到概况的过程。类是具体的,抽象类是中间状态,接口是概况的。
装饰模式就是给方法添加功能的。但是走的是面向对象的模式,也是方法堆栈调用的模式。一个对象中有其他对象的引用,那么这个对象是可以访问其他对象的。
直接上例子我来解释:
//一个基本对象,像个裸体的人。
class Person
{
//默认构造函数
public Person()
{ }
private string name;
//给数据赋值的构造函数
public Person(string name)
{
this.name = name;
}
//方法的基本功能(可以重写)
public virtual void Show()
{
Console.WriteLine("装扮的{0}", name);
}
}
//装饰对象
class Finery : Person
{
//被装饰对象的引用
protected Person component;
public void Decorate(Person component)
{
this.component = component;
}
//重写的方法
public override void Show()
{
if (component != null)
{
component.Show();
}
}
}
//具体的装饰对象
class TShirts : Finery
{
public override void Show()
{
Console.Write("大T恤 ");
//调用其他装饰对象的方法
base.Show();
}
}
//具体的装饰对象
class BigTrouser : Finery
{
public override void Show()
{
Console.Write("垮裤 ");
base.Show();
}
}
//具体的装饰对象
class Sneakers : Finery
{
public override void Show()
{
Console.Write("破球鞋 ");
base.Show();
}
}
//被装饰的对象
Person xc = new Person("小菜");
Console.WriteLine("\n第一种装扮:");
//装饰对象
Sneakers pqx = new Sneakers();
BigTrouser kk = new BigTrouser();
TShirts dtx = new TShirts();
//一层一层的装饰
pqx.Decorate(xc);
kk.Decorate(pqx);
dtx.Decorate(kk);
//一层一层的拆装饰
dtx.Show();
总结:装饰模式从代码上看就是一种对方法的扩展。从意思上看是用不同的对象来装饰。存了对象的引用就是存了对象的全部。还是那句话,编程是靠思想的,工作几年后,一定要形成自己的编程思想,自己的一套理论。如同人到40不惑一样,需要有自己的一套处事理论。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?