设计模式(3)――结构性模式 (四)

2014-11-24 02:43:10 · 作者: · 浏览: 2
g name;
public Person2(string name)
{
this.name = name;
}
public virtual void Show()
{
Console.WriteLine("装扮的{0}",name );
}
}

class Finery2 : Person2 //装饰抽象类
{
protected Person2 component;
public void Decorate(Person2 component)
{
this.component = component;
}
public override void Show()
{
if (component != null)
{
component.Show();
}
}
}

//具体装饰类
class TShirts2 : Finery2
{
public override void Show()
{
Console.Write("大体恤");
base.Show();
}
}
class Sneakers2 : Finery2
{
public override void Show()
{
Console.Write("大裤衩");
base.Show();
}
}
class BigTrouser2 : Finery2
{
public override void Show()
{
Console.Write("垮裤");
base.Show();
}
}

class LeatherShoes2 : Finery2
{
public override void Show()
{
Console.Write("西装");
base.Show();
}
}
class Tie2 : Finery2
{
public override void Show()
{
Console.Write("领带");
base.Show();
}
}
class Suit2 : Finery2
{
public override void Show()
{
Console.Write("皮鞋");
base.Show();
}
}
}
namespace 装饰模式
{
class Class3
{
static void Main(string[] args)
{
Person2 xc = new Person2("小菜");
Console.WriteLine("\n第一种装扮");

Sneakers2 pqx = new Sneakers2();
BigTrouser2 kk = new BigTrouser2();
TShirts2 dtx = new TShirts2();

pqx.Decorate(xc); //一条龙式的装扮,装扮有先后顺序
kk.Decorate(pqx );
dtx.Decorate(kk);
dtx.Show();

Console.WriteLine("\n第二种装扮");

LeatherShoes2 px = new LeatherShoes2();
Tie2 ld = new Tie2();
Suit2 xz = new Suit2();

px.Decorate(xc);
ld.Decorate(px);
xz.Decorate(ld);
xz.Show();

Console.WriteLine("\n第三种装扮");
Sneakers2 pqx2 = new Sneakers2();
LeatherShoes2 px2 = new LeatherShoes2();
BigTrouser2 kk2 = new BigTrouser2();
Tie2 ld2 = new Tie2();

pqx2.Decorate(xc);
px2.Decorate(pqx);
kk2.Decorate(px2);
ld2.Decorate(kk2);

ld2.Show();


Console.Read();
}
}

class Person2
{
public Person2()
{ }
private string name;
public Person2(string name)
{
this.name = name;
}
public virtual void Show()
{
Console.WriteLine("装扮的{0}",name );
}
}

class Finery2 : Person2 //装饰抽象类
{
protected Person2 component;
public void Decorate(Person2 component)
{
this.component = component;
}
public override void Show()
{
if (component != null)
{
component.Show();
}
}
}

//具体装饰类
class TShirts2 : Finery2
{
public o