设计模式--装饰模式

不用通过生成子类的方式给对象动态的添加额外的职责。

为已有功能动态地添加更多功能的一种方法。装饰了原有类的核心职责或主要行为。

这种模式可以有效地把类的核心职责和装饰功能区分开。

比如我要给一个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类。

原文地址:https://www.cnblogs.com/buzhidaojiaoshenme/p/6726295.html