`
bachmozart
  • 浏览: 111373 次
  • 性别: 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复杂

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

粗浅见解,有拍砖的欢迎







分享到:
评论
60 楼 leeo 2009-06-13  
设计模式害死猫啊
59 楼 leeo 2009-06-13  
一帮人,没事瞎咋呼.有时间多看看代码啊.
58 楼 skyuck 2009-06-09  
shrpcn 写道
有些人为了能重构,尽写烂程序,不思量动手就写, 美其名曰可以重构?

没人能保证自己写的代码就天衣无缝,也没有人能保证自己写的代码足够简洁!HelloWorld你还可以怎么写?你想过吗?
57 楼 pacocai 2009-06-09  
    其实设计模式这东西个人是这么理解的,设计模式只是为了让我们的程序更易于扩展,更利于维护的一些方法,可以说是为了写更好的程序的一种基础。学设计模式是一种OO的思想,其中包括一些法则,对这些模式的合理运用及熟练运用是让我们写出来的程序能更利于扩展和维护。说白了就是程序偷懒的基本功。现在对于语言来说学习的难度已经有所降低了。并且现在不管是c#又或是JAVA,从个人的角度来感觉设计的过程实际上比实现的过程更为重要,就像写作文先打草稿一样,最初的设计思想直接影响到以后编码的可维护性,更有可能还会影响程序的执行效率问题。不过说实话,如果真在面试中让我去思考设计模式嘛…………除了几个最初学的几个模式估计还能记住,真让我去死记某种模式该如何实现真记不住。呵呵~~~设计模式现在已经不再是什么高深的东西,相反,个人认为设计模式应该是学习程序设计的入门。那只是起点,而不是终点。

   在此对楼主所说的,面试上必考设计模式嘛,个人认为设计模式必考,但要看如何考法,不应该去考如何实现设计模式,而应该看实现的代码是否更利于维护和扩展,再就是看程序执行的效率。设计模式这种东西应该是一种编程的习惯,而不该是一种对环境硬套的一种模式,当然~~初学者的话推荐硬套,在套的过程中再去体会。
56 楼 bachmozart 2009-06-05  
孔已己这个词大概说的就是楼上几位了

“啧啧,工厂、策略、桥梁、命令、监听器啥的都用上了。我的结论是:在业务复杂的情况下,要构建高扩展性、移植性的系统,没有设计模式不能搞定”

不好意思,我文中说的很傻的行为,大概就是你这种了,你们在这慢慢研究设计模式这种很有前途的,很有技术含量的东西吧

看看等你们把整本书背下来,然后简历写着精通设计模式,看看人家能给你们多少米
55 楼 czwlucky 2009-06-05  
bachmozart 写道

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复杂

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

粗浅见解,有拍砖的欢迎



这段代码和标题似乎没有太大的关系。另外,如此用法感觉不妥,既然实现了Display接口,但行为却不是一个实现类本该有的行为。不知道楼主这么写例子是要说明什么问题?
54 楼 tedeyang 2009-06-05  
等楼主有资格做面试官的那一天,你就明白他们也是被逼无奈了。
有时候,人要设身处地从他人出发考虑问题。
楼主说这样的话,让我想起那些毕业后一两年就大骂大学让你浪费青春学了数据结构,编译原理等等的毛头小子。
53 楼 sgp2004 2009-06-04  
lz的例子貌似确实是代理
飘过。。。
52 楼 comet12345678 2009-06-04  
liudun 写道
少女杀手 写道
刚刚进入职场,但是JAVA的设计模式知道有20多个,就看过一个JNDI,也是不怎么清楚,更不要说其他的了!

我觉得楼主说的对,那些面试官都是在装。
真正开发中用那些模式吗?
我反正没有接触过!


JNDI是设计模式?我晕。。。。。。

除非你是去做外包,什么业务都封装好了。否则,不可能不用到很多模式。我看过公司一电信软交换系统,啧啧,工厂、策略、桥梁、命令、监听器啥的都用上了。我的结论是:在业务复杂的情况下,要构建高扩展性、移植性的系统,没有设计模式不能搞定。




我从来不想要用什么模式,模式也仅仅是解决问题的一个方式,需要的时候自然会用到。很不喜欢一些人,什么都还没做就说要用什么什么模式,为模式而模式的人相当不少。
51 楼 liudun 2009-06-04  
少女杀手 写道
刚刚进入职场,但是JAVA的设计模式知道有20多个,就看过一个JNDI,也是不怎么清楚,更不要说其他的了!

我觉得楼主说的对,那些面试官都是在装。
真正开发中用那些模式吗?
我反正没有接触过!


JNDI是设计模式?我晕。。。。。。

除非你是去做外包,什么业务都封装好了。否则,不可能不用到很多模式。我看过公司一电信软交换系统,啧啧,工厂、策略、桥梁、命令、监听器啥的都用上了。我的结论是:在业务复杂的情况下,要构建高扩展性、移植性的系统,没有设计模式不能搞定。
50 楼 liudun 2009-06-04  
bachmozart 写道
我实在不理解我的言论有什么地方另你们不爽了

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

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


你去面试时面试官跟你谈设计模式——这说明你自己还是应聘初级职位。既然这样,你肯定没有达到架构师的级别,所以你还是没有真正认识到了解设计模式对于OO编程的重要性。不论他是否【开口闭口】、【单单】说设计模式,至少这个确实很重要。事实上,从我的工作经验中看到,没有优良的设计意识的人(比如不了解设计模式)写的代码是很糟糕的。

当然,成为架构师需要掌握太多太多的技术。但面试官没有吹嘘说会设计模式就是架构师吧?
49 楼 少女杀手 2009-06-03  
刚刚进入职场,但是JAVA的设计模式知道有20多个,就看过一个JNDI,也是不怎么清楚,更不要说其他的了!

我觉得楼主说的对,那些面试官都是在装。
真正开发中用那些模式吗?
我反正没有接触过!
48 楼 shrpcn 2009-06-02  
有些人为了能重构,尽写烂程序,不思量动手就写, 美其名曰可以重构?
47 楼 keyboard2000 2009-05-31  
循序渐进的过程
46 楼 bocar 2009-05-31  
总之遵循一个道理,简单就是美,够用就好。
45 楼 yecllsl 2009-05-25  
知识总是先要学别人的,然后总结,然后创新。LZ如果第一个过程都没搞清楚,别人很难相信你已经到了更高的境界。既然你自己觉得设计模式是有用的东西,为什么不多看看,别人问起来先把他想听的讲清楚,再把自己的见解讲出来,告诉他你的水平已经在他想考的水平之上呢?心态问题。
设计模式,重构,重构到模式;再加上自己的思考、总结。
还有,设计模式对架构师是必要条件,不是充分条件。
44 楼 tk5157890 2009-05-23  
楼主帖子右上角就是一个很好的帖子:如何学习设计模式
43 楼 黑山老妖 2009-05-23  
设计模式就像练武的套路一样,初级练武的要照着套路练,才不至于走火入魔。练会套路就说是武林高手是可笑的。设计模式也是套路。会几个设计模式也成不了架构师。
42 楼 ningxiaofeng 2009-05-22  
关键还是看面试岗位吧。

哪怕是死记硬背,如果一个干了两三年的程序员连基本的设计模式都说不清楚。确实很难相信能力上有多么杰出。

至少我知道稍微大一点的公司面试基本都会涉及到设计模式这一块。

一般来说,面试官往往是项目组里比较有经验的程序员。这样的人本身时间也很宝贵,而正常情况下找一名合格的员工需要面试10多个人。

这时候就是淘汰法,不懂的直接淘汰,反正人多么。
41 楼 gecheng 2009-05-22  
bachmozart 写道
mikeandmore 写道
bachmozart 写道
我实在不理解我的言论有什么地方另你们不爽了

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

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

不同意,设计模式是基础。。。一定要知道一些么。
无论你作不做架构师,即便是一个普通的代码民工显然也是需要知道设计模式的。。。


看你的回复,貌似是同意我的观点哦
可能是我表达的不清楚,我本来也不是说设计模式没有用,而是想说模式这东西靠的还是你通过有效代码的积累和思考而自然形成的一些经验总结,而不是书上的那几个死的名字

另外代码看多了,象工厂,包装,观察者这么common sense的东西肯定也早就很熟悉了

也许我该说设计模式书无用,还不如直接去找些好的源码来看来的实在


设计模式是一些好的实践经验的积累,你如果不了解面向对象的基本原则,就很难体会到其中的好处。总之对设计模式
的理解程度代表你对面向对象的认知程度。设计模式不是万能的,不了解设计模式是万万不能的。

相关推荐

    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