.net设计模式-装饰器模式
Posted spinoza
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net设计模式-装饰器模式相关的知识,希望对你有一定的参考价值。
结构型设计模式:关注类与类之间的关系
装饰器模式:用组合+继承的方式对类作出扩展,可以动态为类型添加功能,甚至调整功能顺序,不修改业务类;
一个抽象类
1 public abstract class AbstractStudent 2 3 public int Id get; set; 4 public string Name get; set; 5 6 public abstract void Study(); 7
组合+继承该抽象类
1 public class BaseStudentDecorator : AbstractStudent 2 3 private AbstractStudent _Student = null;//用了组合加override 4 public BaseStudentDecorator(AbstractStudent student) 5 6 this._Student = student; 7 8 9 public override void Study() 10 11 this._Student.Study(); 12 Console.WriteLine("****************"); 13 //基类装饰器必须是个空的行为 会重复 14 15
调用,衍变
1 AbstractStudent student = new StudentVip() 2 3 Id = 1234, 4 Name = "oldkwok" 5 ; 6 //BaseStudentDecorator baseStudentDecorator = new BaseStudentDecorator(student);//1 7 //AbstractStudent baseStudentDecorator = new BaseStudentDecorator(student);//2 8 //student = new BaseStudentDecorator(student);//3
像适配器或者是代码模式那样,想对一个类作出扩展可以分为继承和组合两种方式
1.继承:虽然调用的时候只用到了一个类,但是功能单一
2.组合:虽然可以作出足够多的扩展(组合多种类),但是调用的时候需要初始化代理类和原始类两个类
装饰器模式结合了两者的优点:1.调用的时候只创建属于基类实现的类,2.可作出扩展
添加的功能能够累加
1 StudentHomeworkDecorator(student);//3 2 student = new StudentCommentDecorator(student); 3 student = new StudentHomeworkDecorator(student);//4 4 5 //student = new StudentCommentDecorator(student); 6 //不修改业务类,可以随意的添加功能 装饰器 7 //还可以随意调整顺序
上面代码相当于加一个装饰器就增加一个功能,传入一个,获得返回值,并传入下一个装饰器,得到更强(功能更多)的类,可以理解为向事件中加入方法
以上是关于.net设计模式-装饰器模式的主要内容,如果未能解决你的问题,请参考以下文章