设计模式学习笔记——装饰者模式(Decorator)
1.特点:动态增加单个对象的额外职责,比生成子类更灵活。
2.概念:动态给一个对象添加额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
3.类图:
4.程序实现
/// <summary> /// 定义一个对象接口,可以给这些对象动态地添加职责 /// </summary> public abstract class Component { public abstract void Opration(); } /// <summary> /// 具体对象 /// </summary> public class ConcreteComponent:Component { public override void Opration() { // 具体对象的操作 } } /// <summary> /// 抽象的装饰类,它不能初始化对象。 /// </summary> public abstract class Decorator:Component { protected Component component; /// <summary> /// 设置Component /// </summary> /// <param name="component"></param> public void SetComponent(Component component) { this.component = component; } /// <summary> /// 重写Operation,实际执行的是Component的Operation。 /// </summary> public override void Opration() { if (component != null) { component.Opration(); } } } public class ConcreteDecoratorA : Decorator { private void SpecialOpration() { // 本类特有的功能 } public override void Opration() { //首先运行原Component的Operation(),在执行本类的功能,相当于对原Component进行了装饰 base.Opration(); this.SpecialOpration(); } } public class ConcreteDecoratorB : Decorator { private void SpecialOprationA() { // 本类特有的功能 A } private void SpecialOprationB() { // 本类特有的功能 B } public override void Opration() { //首先运行原Component的Operation(),在执行本类的功能,相当于对原Component进行了装饰 base.Opration(); this.SpecialOprationA(); this.SpecialOprationB(); } }