设计模式(五)装饰模式
装饰模式
为已有模块动态添加更多功能的方式,比子类更加灵活。能够把类中起到装饰作用的逻辑从主逻辑中取出来,简化原有类。e.g. 奶茶可以添加布丁,珍珠...
需要注意的是装饰对象直接需要独立,各自关注各自的功能,否则会有添加的先后顺序影响。
class MilkTea
{
private string name;
public MilkTea()
{
}
public MilkTea(string name)
{
this.name = name;
}
public virtual void Show()
{
Debug.LogFormat("{0}添加了", name);
}
}
class Decorator : MilkTea
{
protected MilkTea person;
public void Decorate(MilkTea de)
{
person = de;
}
public override void Show()
{
if (person != null)
{
person.Show();
}
}
}
class Test1 : Decorator
{
public override void Show()
{
base.Show();
Debug.LogFormat("珍珠");
}
}
class Test2 : Decorator
{
public override void Show()
{
base.Show();
Debug.LogFormat("布丁");
}
}
private void Awake()
{
MilkTea p = new MilkTea("奶茶");
Test1 a = new Test1();
Test2 b = new Test2();
a.Decorate(p);
b.Decorate(a);
b.Show();
}