装饰模式 绝地灬酷狼 2021-12-09 00:43 250阅读 0赞 ## 前言 ## 装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 ## 一、Component抽象类 ## 1 public abstract class Component 2 { 3 public abstract void Operationa(); 4 } Component 定义一个对象接口,可以给这些对象动态地添加职责 ## 二、ConcreteComponent具体对象类 ## 1 public class ConcreteComponent : Component 2 { 3 public override void Operationa() 4 { 5 Console.WriteLine("具体对象的操作"); 6 } 7 } ConcreteComponent 定义了一个具体的对象,也可以给这个对象添加一些职责 ## 三、Decorator装饰抽象类 ## 1 { 2 abstract class Decorator : Component 3 { 4 protected Component component; 5 6 public void SetComponent(Component component) 7 { 8 this.component = component; 9 } 10 public override void Operationa() 11 { 12 if(component != null) 13 { 14 component.Operationa(); 15 } 16 } 17 } Decorator装饰抽象类,继承Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的 ## 四、ConcreteDecorator具体的装饰对象 ## 1 class ConcreteDecoratorA : Decorator 2 { 3 private string addedState; 4 public override void Operationa() 5 { 6 base.Operationa(); 7 addedState = "A New State"; 8 Console.WriteLine("具体装饰对象A的操作"); 9 } 10 } 11 class ConcreteDecoratorB : Decorator 12 { 13 public override void Operationa() 14 { 15 base.Operationa(); 16 AddedBehavior(); 17 Console.WriteLine("具体装饰对象B的操作"); 18 } 19 20 private void AddedBehavior() 21 { 22 //Console.WriteLine("B New State"); 23 } 24 } ConcreteDecorator具体的装饰对象,起到给Component添加职责的功能。 ## 五、运行 ## 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 ConcreteComponent c = new ConcreteComponent(); 6 ConcreteDecoratorA a = new ConcreteDecoratorA(); 7 ConcreteDecoratorB b = new ConcreteDecoratorB(); 8 9 c.Operationa(); 10 Console.WriteLine("==================="); 11 a.SetComponent(c); 12 a.Operationa(); 13 Console.WriteLine("==================="); 14 b.SetComponent(a); 15 b.Operationa(); 16 17 Console.ReadKey(); 18 } 19 } **显示结果:** 具体对象的操作 =================== 具体对象的操作 具体装饰对象A的操作 =================== 具体对象的操作 具体装饰对象A的操作 具体装饰对象B的操作 ## 总结: ## 1、装饰模式是利用SetComponent来对对象进行包装的。这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。 2、使用:当系统需要新功能的时候,是向旧类中添加新的代码。这些新加的代码通常装饰了原类的核心职责或主要行为。 在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。这些新加入的东西仅仅是为了满足一些只在某种特定的情况下才会执行的特殊行为的需要。而装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中。 因此,当需要执行特殊行为时,客户端代码就可以在运行时根据需要有选择的,按顺序的使用装饰功能包装对象。 3、优点:把类中的装饰功能从类中移除,这样可以简化原有类。这样可以有效地把类的核心职责和装饰功能分开,而且可以去除相关类中的重复装饰逻辑。 参考书籍:**大话设计模式**
相关 装饰模式 转载自:[http://blog.csdn.net/wuzhekai1985/article/details/6672614][http_blog.csdn.net_wuzhe 向右看齐/ 2022年08月11日 08:29/ 0 赞/ 191 阅读
相关 装饰模式 装饰模式 1、他所应对的问题 装饰模式主要是应对,按现有业务返回的结果,无法满足新的业务的需要了。而新的业务只是在原有结果上进行了变动。 真的这种情况 如 悠悠/ 2022年07月17日 15:26/ 0 赞/ 225 阅读
相关 装饰模式 装饰模式 装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 即通过不同的组合方式,可以组合出各种不同的行为。 装饰模式结构图如 浅浅的花香味﹌/ 2022年06月05日 01:25/ 0 赞/ 207 阅读
相关 装饰模式 1.使用场景: 在已有的功能上边需要动态的添加新的功能。 2.UML表示 在装饰器模式中通常用以下的几类对象: 抽象构件角色(Project):给出一个接口, 骑猪看日落/ 2022年05月31日 09:27/ 0 赞/ 249 阅读
相关 装饰模式 定义 装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类模式更加灵活。 结构图 ![这里写图片描述][70] 装饰模式的简化: - 日理万妓/ 2022年05月14日 11:28/ 0 赞/ 233 阅读
相关 装饰模式 1、一个相片放入了相框,那么相框装饰了相片。相片相当于component类,相框相当于Decorator类。我们可以发现,相框里面包含一个相片,所以有了一个has-a的关系;但 àì夳堔傛蜴生んèń/ 2022年02月23日 14:40/ 0 赞/ 204 阅读
相关 装饰模式 Decorator装饰模式是一种结构型模式,它主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩 本是古典 何须时尚/ 2022年02月23日 14:38/ 0 赞/ 218 阅读
相关 装饰模式 概述 23种设计模式之一,英文叫DecoratorPattern,中文也叫装饰模式、修饰模式。装饰模式是在不改变类文件和不使用继承的情况下,运行期动态扩展一个对象的功能。 迷南。/ 2022年02月16日 19:11/ 0 赞/ 208 阅读
相关 装饰模式 前言 装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 一、Component抽象类 绝地灬酷狼/ 2021年12月09日 00:43/ 0 赞/ 251 阅读
相关 装饰模式 有抽象类名为早餐,现在具体的食物只需继承早餐抽象类,就可以作为早餐。 具体构件类,如只有breakfast抽象类和Hamburger类,满足需求。 如果需求改变,hamb 分手后的思念是犯贱/ 2021年09月28日 07:06/ 0 赞/ 307 阅读
还没有评论,来说两句吧...