3.装饰模式
概述:装饰模式是在不必改变原文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
特点:
1)装饰对象和真实对象有相同的接口。这样客户端对象就可以和真实对象相同的方式和装饰对象交互。
2)装饰对象包含一个真实对象的索引。
3)装饰对象接受搜有的来自客户端的请求。它把这些请求钻发给真实的对象。
4)装饰对象可以在转发这些请求以前或者以后增加一些附加功能。这样就确保了在运行时,不能修改给定的对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能拓展。
public abstract class Component { public abstract void Operation(); } public class ConcreteCompinent : Component { public override void Operation() { //具体对象的操作 } } public abstract class Decorator : Component { protected Component component; //设置component public void SetCom(Component com) { this.component = com; } //重写方法,实现执行的是Component的operation() public override void Operation() { if (component!=null) { component.Operation(); } } } public class ConcreteDecoratorA : Decorator { //本类的独有功能区别于ConcreteDecoratorB private string addedState; public override void Operation() { //首先运行原Component的OPeration(),再执行本类的功能,如addedState,相当于对原Component进行了装饰 base.Operation(); addedState = "New State"; //具体修饰对象A的操作 //…… } } public class ConcreteDecoratorB : Decorator { public override void Operation() { //首先运行原Component的OPeration(),再执行本类的功能,如AddedBehacior(),相当于对原Component进行了装饰 base.Operation(); AddedBehacior(); //具体装饰对象B的操作 } private void AddedBehacior() { throw new NotImplementedException(); } }