前言:


装饰模式,属于二十三个设计模式中之一,那么,什么是装饰模式,下面,大家请跟着我一起走进装饰模式,来看看装饰模式:


核心:

(一)、结构图


想知道设计模式吗?那么看了它的UML图,你就一目了然了!


【设计模式之装饰模式】_ide


(二)基本代码


Component类


abstract class Component
{
public abstract void Operation();
}

ConcreteComponent类


class ConcreteComponent:Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作");
}
}

Decorato类


abstract class Decorator : 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="New State";
Console.WriteLine("具体操作对象A的操作");
}
}

ConcreteDecoratorB类


class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base .Operation();
AddedBehavior();
Console .WriteLine ("具体操作对象B的操作");
}
public void AddedBehavior()
{

}
}

客户端代码


static void Main(string[] args)
{
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA ();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();


d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();

}

(三)注意




学习设计模式要善于变通,如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类,同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decoratorl类,而可以把Decorato和ConcreteDecorator的责任合并成一个类。




eg.人靠衣服来打扮


【设计模式之装饰模式】_ide_02





(四)、定义


动态的给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。


我们可以通过记住穿衣服打扮自己的例子来理解这个装饰模式,装饰自己,就像添加一些额外的功能一样,这样有利于我们的记忆!




(五)、归类


隶属于创建型模式




(六)、优点


简化原有的类,将核心职责和装饰功能分开


总结:


装饰模式,更好的在代码中实现,加以体会。要 当心的是,装饰模式虽然不错,但是我们在用它的时候,要注意装饰的顺序。