发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
1.概述
装饰者模式,英文名叫做Decorator Pattern。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
2.特点
/// <summary> /// 定义Component对象接口 /// </summary> public abstract class Component { public abstract void Operation();//一个抽象的职责 } /// <summary> /// 具体对象 /// </summary> class ConcreteComponent : Component { public override void Operation() { Console.WriteLine("具体对象的操作"); } } //装饰者抽象类 abstract class Decorator : Component { protected Component component; public void SetComponent(Component component) { this.component = component; } public override void Operation() { if (component != null) { component.Operation(); } } } class ConcreteDecoratorA : Decorator { public override void Operation() { base.Operation(); //首先运行原Compnent的Operation(),再执行本类的功能,如AddedBehavior,相当于对原Component进行了装饰 Console.WriteLine("具体装饰对象A的操作"); } } class ConcreteDecoratorB : Decorator { public override void Operation() { base.Operation(); //首先运行原Compnent的Operation(),再执行本类的功能,如AddedBehavior,相当于对原Component进行了装饰 Console.WriteLine("具体装饰对象B的操作"); } }
(2)无抽象接口
public class Car { public virtual void Description() { Console.Write("基本"); } } public class ESPDecorator : Car { Car car; public ESPDecorator(Car car) { this.car = car; } public override void Description() { car.Description(); Console.WriteLine("带有ESP功能"); } } public class OtherDecorator : Car { Car car; public OtherDecorator(Car car) { this.car = car; } public override void Description() { car.Description(); Console.WriteLine("带有其它功能"); } }
代码调用
//第一种 ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); d1.SetComponent(c); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); d2.SetComponent(c); d2.Operation(); //第二种 Car car = new ESPDecorator(new OtherDecorator(new Car())); car.Description(); Console.Read();
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)
简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)版权声明:觉得此文有用的,不嫌麻烦的,就留个言呐,或者点个赞呐(额,就是文章底部的“顶”啦),要是嫌弃麻烦呢,也麻烦点个...
一文搞懂怎么用C语言实现装饰模式
装饰模式使用抽象对组件的扩展功能进行封装,装饰者和被装饰者完全隔离开来,这样我们就可以任意地改变装饰者和被装饰者,而不会引起影...
深入理解设计模式(19):装饰模式
深入理解设计模式(19):装饰模式一、前言。装饰器模式又名包装(Wrapper)模式。具体构件(ConcreteComponent)角色:定义一个将要接收附...
【C#设计模式-装饰者模式】
【C#设计模式-装饰者模式】一.装饰者模式的定义:(1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。...
装饰模式与代理模式的区别(转载)
装饰模式与代理模式的区别(转载)然而,实际上,在装饰器模式和代理模式之间还是有很多差别的。装饰器模式关注于在一个对象上动态的添加...
.NET装饰模式讲解
NET装饰模式讲解。//////设计模式-装饰者模式///classProgram{staticvoidMain(string[]args){Phoneap=newApplePhone();//新买了个苹果手机Decoratoraps=newSticker(ap);//准备贴膜组件aps.Print();Deco...
C#设计模式(9)——装饰者模式(Decorator Pattern)
装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。到这里,装饰者模式的...
设计模式Decorator模式(又称Wrapper模式)
设计模式----Decorator模式(又称Wrapper模式)2、Decorator模式与生成子类方式的比较。(3)使用Decorator的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator提供了"即插即用"...
设计模式——装饰模式(Decorator)
大多数的装饰模式实际上是半透明的装饰模式,这样的装饰模式也称做半装饰、半适配器模式。透明的装饰模式也就是理想的装饰模式,要求具...
微信扫码,在手机上查看选中内容