上QQ阅读APP看书,第一时间看更新
6.5 小菜扮靓第三版
二十分钟后,小菜第三版代码出炉。
代码结构图
“Person”类(ConcreteComponent)
class Person { public Person() { } private string name; public Person(string name) { this.name = name; } public virtual void Show() { Console.WriteLine("装扮的{0}", name); } }
服饰类(Decorator)
class Finery : Person { protected Person component; //打扮 public void Decorate(Person component) { this.component = component; } public override void Show() { if (component != null) { component.Show(); } } }
具体服饰类(ConcreteDecorator)
class TShirts : Finery { public override void Show() { Console.Write("大T恤 "); base.Show(); } } class BigTrouser : Finery { public override void Show() { Console.Write("垮裤 "); base.Show(); } } //其余类类似,省略 …………
客户端代码
结果显示
第一种装扮: 大T恤 垮裤 破球鞋 装扮的小菜 第二种装扮: 西装 领带 皮鞋 装扮的小菜
“如果我换一种装饰方式,结果会怎样呢?”大鸟改动了小菜的代码。
Console.WriteLine("\n第三种装扮:"); Sneakers pqx2 = new Sneakers(); LeatherShoes px2 = new LeatherShoes(); BigTrouser kk2 = new BigTrouser(); Tie ld2 = new Tie(); pqx2.Decorate(xc); px2.Decorate(pqx); kk2.Decorate(px2); ld2.Decorate(kk2); ld2.Show();
结果就会显示
第三种装扮: 领带 垮裤 皮鞋 破球鞋 装扮的小菜
“哈,光着膀子、打着领带、下身垮裤、左脚皮鞋、右脚破球鞋的极具个性的小菜就展现在我们面前了。”
“你这家伙,又开始拿我开涮。我要这样子,比扮超人还要丢人。”