设计模式(1)装饰模式总结
概述
动态为对象添加额外的功能,相对以前利用子类继承来增加父类的功能来说。装饰模式更为简洁、灵活,更符合面向
对象的原则。
装饰模式结构图

namespace 装饰模式
{
class Program
{
static void Main(string[] args)
{
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA a = new ConcreteDecoratorA();
ConcretedDecoratorB b = new ConcretedDecoratorB();
a.SetComponent(c);
b.SetComponent(a);
b.Operation();
Console.ReadLine();
}
}
//Component类
abstract class Component
{
public abstract void Operation();
}
//ConcreteComponet类
class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作!!!") ;
}
}
//Decorator类
abstract class Decorator : Component
{
//设置Component
protected Component component;
public void SetComponent (Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
//ConcreteDecoratorA类
class ConcreteDecoratorA :Decorator
{
private string addedState;
public override void Operation()
{
base.Operation();
addedState = "标识A的操作,以区别操作B!!!";
Console.WriteLine ("具体对象A的操作!!!");
}
}
//ConcreteDecoratorB类
class ConcretedDecoratorB : Decorator
{
private string removeState;
public override void Operation()
{
base.Operation();
removeState = "标识操作B,以区别操作A!!!";
Console.WriteLine("具体对象B的操作!!!");
}
}
}
最后调用的实际上是Component的方法。
运行结果

特点
1、通过组合而非继承的方式,实现了动态扩展对象的功能的能力
2、有效避免了使用继承的方式扩展对象功能而带来的灵活性差,子类无限制扩张的问题
3、充分利用了继承和组合的长处和短处,在灵活性和扩展性之间找到完美的平衡点
4、装饰者和被装饰者之间虽然都是同一类型,但是它们彼此是完全独立并可以各自独立任意改变的
5、遵守大部分grasp原则和常用设计原则,高内聚、低偶合
6、在装饰过程过长的情况下,影响执行效率。
浙公网安备 33010602011771号