NET装饰器模式解释
装饰器模式的定义:
装饰模式是在不改变原始类文件和使用继承的情况下动态扩展对象的功能。它通过创建包装对象(即装饰)来包装真实对象。
装饰器模式结构图:
装饰模式角色:
(1)抽象组件角色:给出一个抽象接口来标准化准备接收额外职责的对象。(2)具体组件角色:定义一个将接受额外职责的类。(3) Decorator角色:持有一个Component对象的实例,实现一个与抽象组件的接口一致的接口。(4)混凝土装饰者角色:负责向组件对象添加额外的职责。
实现:
引用生活中的例子,我们买了一部新手机,慢慢地给它增加了新的装饰,比如贴膜,增加挂件.
1.首先,将手机类抽象为装饰器模式中的抽象组件:
///summary ///手机抽象类,即抽象器模式下的抽象组件类////summary public抽象类phone {///summary///printing method/////summary public抽象void print();}2.如果我们现在买苹果手机,我们继承抽象类,实现具体的组件类:
///summary ///苹果手机,以模式/////Summary Public Class Apple Phone 3360 Phone {///Summary////重写基类的方法/////Summary Public Override void print(){ console。writeline(‘我有一部苹果手机’);} }3.现在想给这款手机增加一个新的装饰。我们先抽象一下装修类:
///summary ///Decorate抽象类,让Decorate完全替代抽象组件,所以必须继承Phone////Summary公共抽象类decorator 3360 Phone { Private Phone P;//实体对象公共装饰器(Phone p) {this。p=p} public override void Print(){ if(this . p!=null){ p . Print();}} }4.具体装饰对象,继承装饰抽象类:这里具体有膜装饰,和挂件装饰:
///summary////贴膜,具体decorator////summary公开课贴纸: decorator {public贴纸(phone p): base(p){ } public override void print(){ base . print();//添加行为AddSticker();}///summary////新的行为方法////summary public void addsticker(){ console。writeline(‘现在苹果手机有贴纸了’);} }///summary////手机挂件,也就是具体的decorator////summary公共类配件3360 decorator {公共配件(phone p) : base (p) {}公共override void print(){ base . print();//添加一个新的行为addassignments();} ///summary ///新的行为方法////summary public void add attachments(){ console。writeline(‘现在苹果手机有漂亮的吊坠’);} }5.呼叫:
///summary///design mode-decorator mode////summary类程序{ static void main(string[]args){ phone AP=new apple phone();//买了一部苹果手机Decorator APS=new Sticker(AP);//准备贴膜组件aps。print();装饰器apa=新配件(AP);//几天后,吊坠组件apa。已添加Print()。贴纸s=新贴纸(AP);//准备贴膜组件附件a=新附件;//同时准备挂件a . Print();}}类结构图:
(1)抽象组件角色:给出一个抽象接口来标准化准备接收额外职责的对象。这里是电话接口(2)的具体组件角色:定义一个将接受额外职责的类。苹果手机(3)装饰器的角色是保存一个组件对象的实例,并实现一个与抽象组件接口一致的接口。混凝土装饰者的角色:负责给组件对象增加额外的职责。它指的是附件和标签
优点:
1.decorator模式和继承关系的目的是扩展对象的功能,但是Decorator可以提供比继承更大的灵活性。2.设计师可以通过使用不同的特定装饰类别以及这些装饰类别的排列和组合来创建不同行为的许多组合。
缺点:
1.这个特性比继承更灵活,这也意味着更复杂。2.装饰器模式会导致设计中出现很多子类别,如果过度使用,程序会变得非常复杂。3.装饰器模式是为抽象组件类型编程的。然而,如果你想为特定的组件编程,你应该重新考虑你的应用程序架构和装饰器是否合适。当然,也可以更改Component接口,添加新的公共行为,实现“半透明”的装饰器模式。在实际项目中做出最佳选择。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:NET装饰器模式解释是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。