码迷,mamicode.com
首页 > Web开发 > 详细

.net设计模式-装饰器模式

时间:2019-09-10 01:13:40      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:tst   override   设计模式   get   顺序   适配   ring   vat   void   

结构型设计模式:关注类与类之间的关系

装饰器模式:用组合+继承的方式对类作出扩展,可以动态为类型添加功能,甚至调整功能顺序,不修改业务类;

一个抽象类

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设计模式-装饰器模式

标签:tst   override   设计模式   get   顺序   适配   ring   vat   void   

原文地址:https://www.cnblogs.com/Spinoza/p/11494954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!