zoukankan      html  css  js  c++  java
  • 11.明月如何代表我的心 装饰模式

          清晨,皎洁的月光照在洁白的病床上。

          翠花睁开惺忪的睡眼,感觉到苦痛与无聊。幸好,苦娃陪伴着她,正所谓“一死一生乃见交情”,她觉得无尚欣慰。

          但苦娃隐约觉得,翠花好像不开心,每天愁眉不展的。

          苦娃想尽办法逗她开心,扮鬼脸,说笑话,绕口令,猜谜语,打扑克,石头剪子布,杠子老虎鸡虫,这些招都用了,美丽的翠花还是难露笑容,偶尔眯起樱桃小口,看起来也很勉强。

          傍晚,苦娃对着窗户朝外看,便看到了月环食(真巧啊),好美,好像给月亮穿上了美丽的外衣一样,发出耀眼妖媚的光芒。苦娃开始冥思苦想,有了,不如给翠花买漂亮衣服穿吧。

          于是,苦娃出门逛服装店,可转来转去,刚选出一些新潮的款式,一拍脑门,哎呀,忘了,万一买来翠花穿了不合适怎么办?(又不好意思问人家三围多少),于是他继续转。(真是死脑筋)

          路过一家大型商场,看到了一个新鲜玩意儿,高雅又有气质,不禁慨然,“她怎么裸着上身啊,她的胳膊怎么断了呀?”,逗的人家售货的小姑娘咯咯咯咯的笑,“老土,这个都不晓得,这叫维纳斯,是声名显赫的艺术品”,如此一说,使本来就已经被维纳斯弄羞的苦娃的脸,不好意思的又在红的基础上红了红,犹如猴屁股一般。(~(@^_^@)~)

          看苦娃这样,售货小姐心里别提多乐了,话也异乎寻常的更多了些,不动声色地娴熟地继续介绍,“我们呢,还根据这个艺术品的造型,仿造了一些玩具,先生您不妨来看看,都是些既物美价廉,又能显示身份的高档玩具。”

          说着引领苦娃到了另一个柜台旁,指着玻璃窗内的玩具娃娃对苦娃讲,“这个呢,是仿照维纳斯做的芭比娃娃,德国进口软胶”,接着拿出一个来,“您不妨玩一玩,感觉一下。”

          苦娃被那灵动的造型和激发想象力的排列组合吸引了,久久把玩着,爱不释手。(动态地给一个对象添加一些额外的职责,也就是能为已有功能动态地添加更多的功能,有效地把类的核心职责和装饰功能分开了)

          今天说说装饰模式。

    ---------------------------------------------------------------------------------------------------------------------------

          给你图例:    

          有道是趣味相投,缘分使然,他买下这个礼物是对的,也给他带来了意想不到的惊喜。

          翠花是个大话西游中沙悟净般的人物(张卫健版),她嗜好研究娃娃之类的东西达到近乎痴迷的境界,看到这个维纳斯,她高兴地狂笑起来,头也不痛了,眼也不昏了,身子骨也硬朗了许多,她边哼着歌曲边摆弄起来----

     

     abstract class Venus //Component
    {
    public abstract void Show();
    }

    class ChangedVenus : Venus //ConcreteComponent
    {
    public override void Show()
    {
    Console.Write("维纳斯的身上起了变化,依次安装上了");
    }
    }

    class Accessory : Venus //Decorator
    {
    protected Venus component;

    public void Decorate(Venus component)
    {
    this.component = component;
    }

    public override void Show()
    {
    if (component != null)
    {
    component.Show();
    }
    }
    }

    class Arm : Accessory
    {
    public override void Show()
    {
    base.Show();
    Console.Write("上肢 ");
    }
    }

    class Ring : Accessory
    {
    public override void Show()
    {
    base.Show();
    Console.Write("戒指 ");
    }
    }

    class Glove : Accessory
    {
    public override void Show()
    {
    base.Show();
    Console.Write("手套 ");
    }
    }

    class Spin : Accessory
    {
    public override void Show()
    {
    base.Show();
    Console.Write("会旋转 ");
    }
    }

    static void Main(string[] args)
    {
    //实例化维纳斯
    Venus ve = new ChangedVenus();

    Console.WriteLine("第一种芭比组合:");
    Arm a1 = new Arm();
    Ring r1 = new Ring();
    a1.Decorate(ve);
    r1.Decorate(a1);
    r1.Show();
    Console.WriteLine();

    Console.WriteLine("第二种芭比组合:");
    Arm a2 = new Arm();
    Glove g2 = new Glove();
    a2.Decorate(ve);
    g2.Decorate(a2);
    g2.Show();
    Console.WriteLine();

    Console.WriteLine("第三种芭比组合:");
    Arm a3= new Arm();
    Glove g3 = new Glove();
    Ring r3 = new Ring();
    a3.Decorate(ve);
    g3.Decorate(a3);
    r3.Decorate(g3);
    r3.Show();
    Console.WriteLine();

    Console.WriteLine("第四种芭比组合:");
    Arm a4 = new Arm();
    Ring r4 = new Ring();
    Glove g4 = new Glove();
    Spin s4 = new Spin();

    a4.Decorate(ve);
    r4.Decorate(a3);
    g4.Decorate(r4);
    s4.Decorate(g4);
    s4.Show();
    Console.WriteLine();
    Console.Read();
    }

     



          看到翠花如此醉心醉意,恢复了她以前的开心与爽朗,苦娃心里甭提多高兴了,连日来的阴霾也一扫而尽。

          打开窗户,今夜月光明媚,皎洁无暇,苦娃心想明天啊一定是个艳阳天

    作者:LevinLee
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    在Linux下安装配置Oracle11g R2
    使用C#读取dbf行情文件
    终于完成了DailyBuild
    如何用NANT+FxCop 并生成文档规范检测结果?
    Nant中的一个小问题(可能让许多人急掉许多汗哦)
    最近在研究 Daily Build 不知道如何用CC.Net 得到 VSS改动的情况
    利用NAnt取得远程VSS服务器中的文件并且编译
    未曾秋高气爽,亦然爬山去也
    如何使用命令提示符下的FxCop
    在NAnt中加入Vssget 任务
  • 原文地址:https://www.cnblogs.com/levinlee/p/2286879.html
Copyright © 2011-2022 走看看