大话设计模式
上QQ阅读APP看书,第一时间看更新

6.2 小菜扮靓第一版

“先不谈模式,说说你刚才提到的穿衣问题。我现在要求你写一个可以给人搭配不同的服饰的系统,比如类似QQ、网络游戏或论坛都有的Avatar系统。你怎么开发?”

“你是说那种可以换各种各样的衣服裤子的个人形象系统?”

“是的,现在你就简单点,用控制台的程序,写可以给人搭配嘻哈服或白领装的代码。”

“哦,我试试看吧。”

半小时后,小菜的第一版代码出炉。

结构图

“Person”类

class Person
{
    private string name;
    public Person(string name)
    {
        this.name = name;
    }
 
    public void WearTShirts()
    {
        Console.Write("大T恤 ");
    }
 
    public void WearBigTrouser()
    {
        Console.Write("垮裤 ");
    }
 
    public void WearSneakers()
    {
        Console.Write("破球鞋 ");
    }
 
    public void WearSuit()
    {
        Console.Write("西装 ");
    }
 
    public void WearTie()
    {
        Console.Write("领带 ");
    }
 
    public void WearLeatherShoes()
    {
        Console.Write("皮鞋 ");
    }
 
    public void Show()
    {
        Console.WriteLine("装扮的{0}", name);
    }
}

客户端代码

static void Main(string[] args)
{
    Person xc = new Person("小菜");
 
    Console.WriteLine("\n第一种装扮:");
 
    xc.WearTShirts();
    xc.WearBigTrouser();
    xc.WearSneakers();
    xc.Show();
 
    Console.WriteLine("\n第二种装扮:");
    xc.WearSuit();
    xc.WearTie();
    xc.WearLeatherShoes();
    xc.Show();
 
    Console.Read();
}

结果显示

第一种装扮:
大T恤 垮裤 破球鞋 装扮的小菜
 
第二种装扮:
西装 领带 皮鞋 装扮的小菜

“哈,不错,功能是实现了。现在的问题就是如果我需要增加‘超人’的装扮,你得如何做?”

“那就改改‘Person’类就行了,”小菜说完就反应过来,“哦,不对,这就违背了开放-封闭原则了。哈,我知道了,应该把这些服饰都写成子类就好了。我去改。”

大鸟抬起手伸出食指对小菜点了点,“你呀,刚学的这么重要的原则,怎么还会忘?”