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

2014-11-24 02:43:10 · 作者: · 浏览: 1
ame = name;
}
public abstract void Attack();
public abstract void Defense();
}
class ForWards : Player //前锋
{
public ForWards(string name)
: base(name)
{ }

public override void Attack()
{
Console.WriteLine("前锋{0}进攻",name );
}

public override void Defense()
{
Console.WriteLine("前锋{0}防守",name );
}
}
class Center : Player //中锋
{
public Center(string name)
: base(name)
{ }

public override void Attack()
{
Console.WriteLine("中锋{0}进攻",name );
}

public override void Defense()
{
Console.WriteLine("中锋¤0}防守",name );
}
}
class Guards : Player //后¨ 卫¨¤
{
public Guards(string name)
: base(name)
{ }

public override void Attack()
{
Console.WriteLine("后卫{0}防守",name );
}

public override void Defense()
{
Console.WriteLine("后卫{0}进攻",name );
}
}


//外籍中锋
class ForeignCenter //相当于姚明的位置,他打的是中国的球
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}

public void 进攻()
{
Console.WriteLine("外籍中锋{0}进攻",name );
}
public void 防守()
{
Console.WriteLine("外籍中锋{0}防守",name );
}
}

class Translator : Player //翻译者——相当于姚明的翻译为他去打球
{
private ForeignCenter wjzf = new ForeignCenter(); //外籍中锋

public Translator(string name)
: base(name)
{
wjzf.Name = name;
}

public override void Attack()
{
wjzf.防守();
}

public override void Defense()
{
wjzf.进攻();
}
}
}


7. 装饰模式

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。装饰最后形成的是一个对象链,下一个装饰上一个,下一个被下下一个装饰(就像一杯白开水,加入白糖装饰之后还可以用加入咖啡装饰,之后还可以在加入茶叶装饰,之后还可以加入……形成一个链)


UML图

\


代码:

view plaincopy to clipboardprint 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 strin