不用通过生成子类的方式给对象动态的添加额外的职责。
为已有功能动态地添加更多功能的一种方法。装饰了原有类的核心职责或主要行为。
这种模式可以有效地把类的核心职责和装饰功能区分开。
比如我要给一个Person类添加额外的职责
//定义一个person类
public class Person
{
public Person()
{ }
private string name;
public Person(string name)
{
this.name = name;
}
public virtual void Show()
{
Console.WriteLine("装扮的{0}",name);
}
}
//装饰基类,继承于person类,设置要装饰的对象
class Finery:Person
{
Person component;
public void Decorate(Person component)
{
this.component = component;//传入设置要装饰的对象
}
public override void Show()
{
if(component!=null)
{
component.Show();
}
}
}
//实现装饰基类
class Sneakers:Finery
{
public override void Show()
{
base.Show();
Console.WriteLine("sneakers");
}
}
class TShirts:Finery
{
public override void Show()
{
base.Show();
Console.WriteLine("T恤");
}
}
//调用
Person xc = new Person("jech");
Console.WriteLine("第一种");
Sneakers sneaker = new Sneakers();
TShirts tshirt = new TShirts();
sneaker.Decorate(xc);//设置要装饰的对象
tshirt.Decorate(sneaker);
tshirt.Show();
//如果还有要添加的职责,可以继续实现Finery类。