最近在看设计模试方面的东西,看到装饰者模式,感觉不太理解。现在有一个场景,一个頋额,去超市买水果,可供选择的水果有 桔子,苹果,香焦,波萝,每样水果都有水果名称,价格属性,如何使用装饰模试,模拟顾客购物,得到客户购买的水果清单,每个水果的价格,及合计金额

解决方案 »

  1.   

    给你一个场景,给你几个类,告诉你用xxx模式。你按照书上写的方法,对照UML写出个实现(其实能看懂UML图写出代码已经不算很菜了)。这就好比什么呢?拍武打片,站好了模特,说好了用什么什么招式,先大家都不动,你运一口气,数321,开始。你这个连环动作一做,对方自动倒地,做痛苦状。大功告成。你根本体会不到这个招式的妙处,一点成就感也没有。如果你遇到一个歹人,真的要开打了,你还敢用这些招式么?同样,你遇到真实的需求,你知道这里该不该用装饰模式,比你怎么用装饰模式更重要。你不能抱着你的电脑和客户说,对不起,你的需求改一改,不然这里不能套用这个设计模式。
      

  2.   


    这就好比一个Word或者Excel的操作员学习编程。对你来说,定义一个变量,或者调用一个函数,是具体的方法,对于打字操作员来说,这些就抽象了,对他来说,点哪个菜单,在哪里输入哪几条语句才是具体的解决方案。设计模式就是这样,本身是给有具体解决方法的人提供更高层次的抽象的。你连具体实现都没学会,学设计模式有什么意义呢。
      

  3.   

    好,那我就告诉你,装饰模式在C#里面一般没有用了。因为语言层面已经实现了。这个语法叫扩展方法。一个典型的例子就是LINQ。我们知道,Where Count OrderBy First ToArray ... 这些方法都不属于 List,或者 Cpllection 或者数组。它们通过扩展方法被装饰上去的。工厂模式也没用了,我举一个例子,你体会下:
    http://topic.csdn.net/u/20120103/14/ab3582e6-0988-4cfb-8684-6f8e94adb6fe.html至于策略模式,其实也用不到了。
    匿名委托和Lambda表达式把分离策略算法的工作简化到了极致。