装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式(Decorate Pattern)比生成子类更为灵活。装饰模式是为已有功能动态的添加更多功能的一种方式,当系统需要新功能的时候,不是像旧的类中添加新的代码,新的逻辑,但这样就增加了主类的复杂度,而装饰模式却提供了一个非常好的解决方案,他把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。
这样做的好处是有效的把类的核心职责和装饰功能分开了而且可以去除相关类中重复的装饰逻辑。
这是文字的说明。
举一个设计模式的例子
装饰模式(Decorate Pattern)UML类图
类和类之间是继承关系,图片最下面六个类都重写Person类的Show方法,按照这样安排类和类之间的关系想让小菜有几种装饰小菜就有几种装饰。
下面是实现装饰模式的部分代码。
这是Person类
class Person
{
public Person ()
{ }
private string name;
public Person(string name)
{
this.name=name;
}
public virtual void Show()
{
Console.WriteLine("装扮的{0}", name);
}
}
这是Finery类
class Finery:Person
{
protected Person component;
public void Decorate(Person component)
{
this.component = component;
}
public override void Show()
{
if (component != null)
{
component.Show();
}
}
}
这是具体服饰的类,只写一个类,其余类似
class BigTrouser : Finery
{
public override void Show()
{
Console.WriteLine("垮裤");
base.Show();
}
}
这是控制台程序的部分代码
Person xc = new Person("小菜");
Console.WriteLine("\n第一种装扮");
Sneakers pqx = new Sneakers();
BigTrouser kk = new BigTrouser();
Tshirts dtx = new Tshirts();
pqx.Decorate(xc);
kk.Decorate(pqx);
dtx.Decorate(kk);
dtx.Show();