using System;
namespace aa
{
class DecoratePattern
{
static void Main(string[] args)
{
Person person = new Person("小菜");
Sneaker ydx = new Sneaker();
BigTrouser kk = new BigTrouser();
TShirts dtx = new TShirts();
ydx.Decorate(person);
kk.Decorate(ydx);
dtx.Decorate(kk);
dtx.Show(); //这句话,里面具体运行先运行哪一步,后运行哪一步?
Console.Read();
}
} class Person
{
public Person()
{ }
private string Name;
public Person(string name)
{
this.Name = name;
}
public virtual void Show()
{
Console.WriteLine("装扮的{0}", Name);
}
}
///<summary>
///穿衣服的人
///</summary> class Finery : Person
{
protected Person component; //public Finery(Person _component)
//{
// component = _component;
//}
//打扮
public void Decorate(Person _component)
{
this.component = _component;
}
public override void Show()
{
if (component != null)
{
component.Show();
}
}
}
///<summary>
///穿T_shirt的人
///</summary> class TShirts : Finery
{
public override void Show()
{
Console.WriteLine("大T恤");
base.Show();
}
} ///<summary>
///穿裤子的人
///</summary> class BigTrouser : Finery
{
public override void Show()
{
Console.WriteLine("跨裤");
base.Show();
}
} ///<summary>
///穿运动的人
///</summary>
class Sneaker : Finery
{
public override void Show()
{
Console.WriteLine("跨");
base.Show();
}
}
}输出的结果为:
大T恤
跨裤
跨
装扮的小菜
刚刚学这个模式! 原理基本了解了。 想知道这个例子是怎么运行的,
kk.Decorate(ydx);
dtx.Decorate(kk);
dtx.Show()
=>调用 dtx.Show()也就是先输出 大T恤 dtx中的commponent位 BigTrouser ,接着 调用它的实例
kk,同样先输出 跨裤 接着调用 它里面的commponent的 show(),以此类推