`
bachmozart
  • 浏览: 111379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生搬硬套设计模式坑害了多少人

    博客分类:
  • Java
阅读更多
看了这个帖子,有感写点废话
http://www.iteye.com/topic/243309

现在随便哪个面试不考点设计模式什么的,似乎就不叫面试,我倒想问问,面试官们你们自己不算那些死记硬背的,能记住多少模式的思想,又有多少是你们每天写的程序会用到的

我承认
1. 设计模式确实是前人总结的一些经验和良好的设计范式,是很有价值的
2. 把握良好的设计模式能够理清程序的骨架,使程序变得更清晰

但是我很想说的是

1.设计模式是最通用的一些程序设计方法和范式,不同的领域有自己的一些模式可以遵循,未必非得是那20几种里的某一个

2.书中列举的那些模式是死的,只是特定问题的一些设计思路,未必就非得那样,生搬硬套是很傻的行为

3.设计模式这东西没写过一定得代码量,看了书上写的那些也未必理解,代码量积累到一定程序(当然不是每天重复的体力劳动,需要勤思考),自然会对特定领域,或特定问题有自己的一套解决方法或者设计范式,很可能早就有了一套自己的组件库,所以也不需要去看书上那些死的东西,该会的你都会了,其他的你也用不到

所以基本上 面试时考个什么叫包装,什么叫工厂,抽象方法的实在是没什么意义,都成了背书了

举个最简单的例子,设计模式书上讲包装设计模式废了那么多笔墨,又是抽象类,又是接口的,累不累呀,其实可能天天都用的东西,不搞复杂点就不叫高深,这样难道不叫包装吗?

public interface Display{
     String display();
}

public class DisplayWrapper implements Display{
    private Display display;
    public DisplayWrapper(Display display){
        this.display=display;
    }
    public String display(){
        String s=display.display();
        //wrapper自己的处理
    }
}


很多程序员几乎认为,封装得不花个半天功夫根本找不到实现类在哪 这就是面向对象的美,就是面向对象的最高境界,简单的事情往往搞的N复杂

我就是想说 简单的就是最好的,简单的往往也是强大的

粗浅见解,有拍砖的欢迎







分享到:
评论
40 楼 bachmozart 2009-05-21  
tibetjungle 写道

lz是不是最近去面试了,碰到的面试官还问模式的问题,让自己觉得特别窝火?!现在的IDE里,从接口找到实现类(反之亦然)是很简单的啊,用右键菜单直接跳转就行,你举的哪个例子不是很有代表性吧?

不过我同意你的另一半观点:模式这东西,是在不停的实践中感悟出来的,虽然你看书可以指导有哪些模式,但是你不知道在自己的应用场景里是不是有用得着的地方。不停地实践,编码,重构,做多了,就对模式了然于心,知道什么样的问题用什么方式解决是最佳的啦。我觉得用模式的一个最高境界是,发现应用场景中的某个问题正好可以用某个模式灵活解决,而不是反过来,为了用模式而将其生搬硬套地放入应用场景,为了模式而模式。现在很多人是后者吧。


其实我现在已经后悔发了这个比较无聊的帖子
我主要是觉得太多人把设计模式看得太重了,其实能掌握常用的那些就足够了,有更多远远比模式这东西更值得研究的
所以,基本从面试官考什么就能看出这个team值不值得去了
39 楼 tibetjungle 2009-05-21  
bachmozart 写道
我实在不理解我的言论有什么地方另你们不爽了

通常架构师早就对常用设计模式很熟悉了,但是单单说熟悉设计模式,那离架构师水平还差十万八千里呢

我就是鄙视那些张口闭口让谈谈设计模式的面试官们,一看就知道压根肚子里就没啥东西,所以就以为掌握那么几个设计模式就很nb了,可笑之极


lz是不是最近去面试了,碰到的面试官还问模式的问题,让自己觉得特别窝火?!现在的IDE里,从接口找到实现类(反之亦然)是很简单的啊,用右键菜单直接跳转就行,你举的哪个例子不是很有代表性吧?

不过我同意你的另一半观点:模式这东西,是在不停的实践中感悟出来的,虽然你看书可以指导有哪些模式,但是你不知道在自己的应用场景里是不是有用得着的地方。不停地实践,编码,重构,做多了,就对模式了然于心,知道什么样的问题用什么方式解决是最佳的啦。我觉得用模式的一个最高境界是,发现应用场景中的某个问题正好可以用某个模式灵活解决,而不是反过来,为了用模式而将其生搬硬套地放入应用场景,为了模式而模式。现在很多人是后者吧。
38 楼 黑暗浪子 2009-05-20  
问一下,张无忌是怎么学太极拳和太极剑的?
37 楼 wt8414 2009-05-20  
弱弱的问一下,什么是设计模式
36 楼 dopic 2009-05-20  
真的有只有23种设计模式吗!适合自己就行
35 楼 iaimstar 2009-05-19  
墓里活人 写道

设计模式的最高境界

就是心中无模式,
自己写的代码 功能 模块,不加以过多的思考,自然而然的形成一种 有规可循,有依有据,易扩展及维护。多种动态配置解耦方式。

甚至可以在项目做完了,大面面积的修改,心里都底气十足。

这就是“无”模式。


楼上的头像和回复可以总结一下
看遍天下设片,心中自然无码
34 楼 墓里活人 2009-05-19  

设计模式的最高境界

就是心中无模式,
自己写的代码 功能 模块,不加以过多的思考,自然而然的形成一种 有规可循,有依有据,易扩展及维护。多种动态配置解耦方式。

甚至可以在项目做完了,大面面积的修改,心里都底气十足。

这就是“无”模式。

33 楼 willko 2009-05-19  
我总觉得什么事情都需要一个过程

听说模式-》了解模式-》学习-》使用-》犯错-》思考-》忘记模式
32 楼 jonescheng 2009-05-19  
估摸楼主给开口设计模式,闭口XX框架,结果肚子里没货的
面试官给郁闷了...
31 楼 skydream 2009-05-19  
skyuck 写道
重构,重构,无限次的重构,模式自然就出来了。


这也是我的观点,我是04年开始接触设计模式,05,06年大肆使用,后来发现有点不对劲,设计模式这个东西很容易用的过头,也很容易造成为了模式而模式的错误趋势。

之后发现tdd + 持续重构是一个好的方法,先别想那么多模式的问题,需求清楚了,大的架构设计定型了,细节实现不要考虑太多设计。等整个东西做完了,回头看时,会发现写出来的代码,到处都是所谓的模式。

但这种方式需要对tdd和重构有深刻理解,而且本身是必须对设计模式足够老到,不适合新手。而且,似乎从观念上一般不容易被人接受。
30 楼 johnnyking39 2009-05-18  
湖南陈冠希 写道
我觉得你接触的设计模式太少,还很年轻啊.



ID 牛X
29 楼 iaimstar 2009-05-18  
楼上的id 我日
28 楼 湖南陈冠希 2009-05-18  
我觉得你接触的设计模式太少,还很年轻啊.

27 楼 skyuck 2009-05-18  
重构,重构,无限次的重构,模式自然就出来了。
26 楼 bcccs 2009-05-17  
coosummer 写道
引用
很多程序员几乎认为,封装得不花个半天功夫根本找不到实现类在哪 这就是面向对象的美,就是面向对象的最高境界,简单的事情往往搞的N复杂
我就是想说 简单的就是最好的,简单的往往也是强大的

封装的目的不是为了封装而封装的,而是为了业务的可扩展性而做的

不扩展就不封装了?
25 楼 coosummer 2009-05-17  
引用
很多程序员几乎认为,封装得不花个半天功夫根本找不到实现类在哪 这就是面向对象的美,就是面向对象的最高境界,简单的事情往往搞的N复杂
我就是想说 简单的就是最好的,简单的往往也是强大的

封装的目的不是为了封装而封装的,而是为了业务的可扩展性而做的
24 楼 wxq594808632 2009-05-15  
..俺是刚毕业的.确实不大明白..
23 楼 whaosoft 2009-05-14  
说到设计模式也要看经验的 不是刚毕业的~就能说的~
22 楼 TheMarine 2009-05-14  
支持楼主.
我认为设计模式这个名字已经诠释了自己是干什么的么?模式,就是特定环境中一种常规的大家都认可都知道的解决方案.本身就是比较刻板的.是oo设计上的专用名词.各个领域都有自己的专业名词:xx生产模式,xx销售模式等等,这个是大家用来方便交流的.
所以运用设计模式,不是说我今天要用xx模式写代码,而是应该这样说,我今天写的这个代码是属于xx模式的,是先写出来,然后被归类成......
设计模式何止百种,只是写进书是最常见最经典的20多种罢了.模式名字也只是用于交流,"这里用xx模式解决是合适的".生搬硬套确实没有必要,因为模式本身就是虚无的,是经验,不是定理条约,很多原先的经典模式到现在不是已经被淘汰了么.
21 楼 anky_end 2009-05-14  
stevendu 写道
引用

模式这东西靠的还是你通过有效代码的积累和思考而自然形成的一些经验总结,而不是书上的那几个死的名字

作为面试官需要的就是你的积累,需要的就是你对细节的把握,至于对模式生搬硬套的回答,一眼就看出来了。

很抱歉的说,多数时候,面试官自己都不知道设计模式是啥玩意。

不过一般来说,多数情况下就考几个定式罢了。会不会这玩意其实对面试没有很大影响,综合考虑的。

哪有那么多架构师职位去招聘,真要招聘这种职位,主要还是看行业经验和行业名声,多数情况下这种职位是老总直接面谈的,不会找几个面试官去和应聘者jjyy,等于不尊重应聘者么

相关推荐

    J2ee设计模式.pdf

    J2EE(Java 2 Platform, Enterprise Edition)设计模式是针对企业级应用程序中重复出现的问题提出的解决方案,...在学习和使用这些模式的过程中,开发者应当结合具体的应用场景,灵活地应用这些模式,而非生搬硬套。

    设计模式java

    设计模式是软件工程中一个重要的概念,它是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。很多模式在Java等面向对象的...

    设计模式 C#23个设计模式

    同样,设计模式不是生搬硬套的模板,而是根据项目需求选择合适的方式,以达到最佳效果。 【设计模式的作用】在于提高代码的可维护性、可扩展性和性能。正确使用设计模式可以使软件在面对需求变更时保持稳定,同时...

    Go设计模式

    最后,尽管设计模式是编程中的重要概念,但不应该生搬硬套。在实际开发中,需要根据具体情况来决定是否使用某种设计模式,以及如何适当地运用这些模式来提升软件的质量。使用设计模式的目的是为了解决特定问题,并不...

    23种设计模式知识要点.pdf

    设计模式是软件工程中用于解决特定问题的一般性指导方案,它们是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。23种设计...

    设计模式PPT

    学习设计模式并不意味着在每个项目中都生搬硬套,而是要根据具体需求选择合适的设计模式,实现最佳的设计决策。设计模式的掌握需要时间和实践,通过反复练习和应用,开发者能够更好地理解和应用这些模式,从而提升...

    《漫谈设计模式》—Java设计模式的好帮手

    同时,作者可能会强调,虽然设计模式提供了通用的解决方案,但并不意味着在所有情况下都应该生搬硬套,关键在于理解其背后的意图和原则,以便在需要的时候能够灵活运用。 此外,书中可能会讨论如何将设计模式与Java...

    PHP设计模式.rar

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。在PHP编程领域,理解并熟练运用设计模式对于提升代码质量、可维护性和可扩展性至关重要。本资料主要围绕PHP设计模式进行深入探讨。...

    C#23中设计模式(完整版)

    C#23中设计模式涉及到的是软件设计模式,它是一套被反复使用、多数人知晓、分类编目、代码设计经验的总结。设计模式主要是为了提高代码的可重用性,让代码更容易被他人理解,保证代码的可靠性。在C#编程中,熟练掌握...

    java开发设计模式

    在应用设计模式时,重要的是理解其背后的思想和原则,而不是生搬硬套。设计模式只是工具,目的是解决实际问题,提高代码质量。通过合理地应用设计模式,可以在软件开发中实现更优雅、更高效的解决方案。

    幻灯20090119王翔CSharp设计模式工程化实现

    王翔指出,设计模式不是万能的,也不应生搬硬套。在实际应用中,需要根据项目需求选择合适的设计模式,并理解其背后的意图和适用场景。滥用设计模式可能导致不必要的复杂性,影响项目的效率和可读性。因此,理解设计...

    Android源码设计模式分析

    通过分析Android系统中的设计模式来提升大家对设计模式的理解,从源码的角度来剖析既增加了对Android系统本身的了解,也从优秀的设计中领悟模式的实际运用以及它适用的场景,避免在实际开发中的生搬硬套。

    无废话C#设计模式.doc

    在实践中,设计模式的运用并不是生搬硬套,而是需要根据项目需求进行适当的调整和融合。有时候,简单的解决方案可能比复杂的模式更有效。关键是理解和掌握设计模式背后的意图,而不是机械地复制模式的结构。 总的来...

    设计模式趣谈之我之见解

    在实际项目中,设计模式的运用并不是生搬硬套,而是根据需求灵活选择。比如,对于复杂业务流程,可以使用策略模式来定义一系列可互换的算法;对于处理事件响应,可以利用观察者模式来建立发布/订阅关系。 此外,...

    模式设计(中文版)学习模式设计必备书籍。经典著作

    《模式设计》是一本在IT行业内备受推崇的经典著作,它深入浅出地介绍了设计模式这一程序设计领域的核心概念。设计模式是软件开发中经过实践验证的解决方案,它们为解决常见问题提供了可复用的模板,使得开发者能够更...

    .NET中的设计模式

    设计模式的使用并非生搬硬套,而是根据项目需求灵活运用,它们是解决软件设计问题的工具,而不是固定的公式。 在.NET中实现设计模式时,由于语言特性如泛型、委托、事件等的支持,可以更加便捷地实现各种模式。同时...

    ASP.NET设计模式

    在详细探讨***设计模式之前,首先要了解***作为一种用于构建动态网站、...需要注意的是,在阅读和应用《***设计模式》时,应保持对模式适用场景和限制的认识,避免在不适合的场景下生搬硬套,反而降低软件设计的质量。

    《PHP设计模式介绍》

    设计模式的应用并非生搬硬套,而是根据实际需求灵活选择和组合。理解并掌握这些模式,能帮助开发者写出更优雅、更健壮的PHP代码。通过不断实践和学习,我们可以更好地利用设计模式来应对各种编程挑战,提高软件开发...

    23种设计模式

    创建型模式、结构型模式是软件设计模式中的两种主要类别,它们用于处理对象的创建、组织以及它们之间的关系。设计模式的概念源自建筑学,用于在软件工程领域中提供一种针对特定问题的解决方案模式。 创建型模式关注...

Global site tag (gtag.js) - Google Analytics