日期:2014-05-20  浏览次数:20741 次

下班了没事,设计模式之一角
闲来无事翻翻以前的文档,结合今天去面试了几个人而感,
一些公司常拿设计模式来考,特别是工厂相关模式,记得比较经典的就是普通员工、工程师和管理者的工资结算问题(工厂+策略)

  有时我在想,针对这个需求有必要吗?我硬编码会怎么样(硬编码不一定就不是模块化编程)?代码量会更少,在增加新的一种角色计算时,增一个case未必会导致错误和难以维护,同样也要修改代码重新编译,只是放在别的类中抽象出多层。

  再者如果角色增加比较多,我相信这种模式会比较烂更难以维护,代码量会倍量增加,其实我们的原则是抽象变化,举个具体例子:在配置表中维护角色和工资计算公式,以应变可能的变化。这样做在公式变化的情况下不会对代码做出修改,可维护性高,岂不是更好?
我不想把例子中的方法往哪种设计模式上靠,而只是想提出一种问题和想法,我觉得有些设计模式的书介绍其适应环境时应当介绍其度的问题,更觉的作为面试官不应一味问这些在他心中固定可事实可变的SB设计问题

  这是怎么了,一天头晕乎乎的,都不知道自己说了些什么,只是看了一些过度设计和走套路的设计的感想,头痛,可能明天就不这么想了,哈哈,有错误的地方可以指正,谢绝谩骂,呵呵



------解决方案--------------------
楼主好闲啊。
------解决方案--------------------
面向对象设计原则第二条:对扩展开放,对修改关闭。

也就是说,当我们在业务类型上想到要Switch分支判断而又要复用原来的设计时,仍然要保持原来的代码不变,使用多态的方法来实现。当然,这是指高层地扩展、业务领域类型的扩展。那种不能“对修改关闭”的方法,就是重新修改源代码然后重新编译和发布。
------解决方案--------------------
模式不模式的名词不重要。重要地是,当你增加一种所谓的人员角色时,你的整个工资核算系统的代码是处处都要重新修改,还是仅仅修改一个点呢?
------解决方案--------------------
这个话今天说过了,再说一遍也无妨:

我猜想,GoF的理论形成的时候,JAVA有没有发明还是个问题,更不要说C#了,
楼主如果用C++开发的话,可能差不多有用.

今天,更先进的技术条件,使得开发者能够用更通俗的思维方式去设计软件,
开发者利用更少的、更简洁的设计模式就能解决更多、更复杂的问题
------解决方案--------------------
呵呵,不是设计模式的问题

是实现难度的问题。lz的解决方案是“元数据编程”而“元数据编程”是个超范式。是编写计算机语言的语言

所以“元编程”从理论上来说能解决一切问题

so,从理论上来说,lz可以不要任何设计模式,元编程能解决一切问题。


------解决方案--------------------
lz的意思是照本宣科好几年之后,自己思路开阔了,才发现原来书本上其实是一些很简单的花拳绣腿,现在自己随便耍一耍就可以自然而然地暗合理论的目标了是吧?!

是这样的。既可以学十种八种中国传统武术拳种套路来学搏击术,也可以学现代的搏击术(以及现代训练方法)然后评判传统套路打法到底有没有实力。设计模式就是为了四人帮配合推广java语言的产物,是将近20年前的搏击练法之一。凡是编程模式,基本上都是跟编程语言语法一样,都是一些小代码、小技巧。
------解决方案--------------------
实际上这东西就和围棋里面的定式是一样的概念

可以按定式下也可以不按定式下,具体如何决定只看哪种更符合利益

当然下棋本身有写基础原则,就如同我们的那5个设计原则。只要不违背设计原则的一切皆可以

就像围棋里面对定式的描述“定式只是一个在通常这种局面下不吃亏的手段”如果你有很好的手段,那么大可以使用,如果没有更好的手段,按定式下起码不吃亏(当然前提是你选的定式要符合那个场景)
------解决方案--------------------
看了下,发现自己也出来这么多年了,很多东西,并不太清楚,

总觉得自己欠缺些什么。。。因为有些时候别人问你某些技术、或是什么原理上的东西。

自己答不上来,但一听别人解释,发现其实自己曾经也做过。。。汗。。。。蛮杯具的。
------解决方案--------------------
没从模式的 存在总有一定的理由 你不应该看到他们的缺点 而是有点

有时候 缺点也是 有点

------解决方案--------------------
其实模式的真正核心是:封装变化。 Encapsulate what varies。
------解决方案--------------------
太好了呵呵!
------解决方案--------------------
封装是一种伟大的思想
------解决方案--------------------
强势围观!!!!!!!!!!!!!!!!!!!!!!!!!!!!
------解决方案--------------------
学习的过程总是一个曲线的过程,不断的怀疑,打消怀疑,再怀疑,再打消怀疑。。。
等真的到了大师了,心中也许早已没有了模式。。。
------解决方案--------------------
刚接触设计模式,一下子开阔了,原来可以这样!
------解决方案--------------------
先mark,回来再看
------解决方案--------------------
呵呵,学习学习
------解决方案--------------------
学习了,现在在看设计模式,对于我,它还是很启发我的思路的,~~
------解决方案--------------------