我已经阅读了大约4-5本关于设计模式的书籍,但我仍然觉得我在设计模式方面还没有接近中级水平?

我应该如何学习设计模式?

有关于设计模式的好书吗?

我知道这只会来的经验,但必须有一些方法来掌握这些?


当前回答

练习练习再练习。我认为4到5本书在没有大量练习的情况下是一种过度的阅读练习。我认为,做到这一点的最佳方法是开始使用这些模式重构您当前的项目。或者,如果你没有任何正在积极进行的项目,那么就按照你自己的方式来做,然后尝试重构模式。

如果你没有亲身经历过他们所解决的问题,你就无法充分欣赏他们。请记住,它们不是银弹——你不需要记住它们,并在飞行中努力应用它们。我的意见…

其他回答

The way I learned design patterns is by writing lots of really terrible software. When I was about 12, I have no idea what was good or bad. I just wrote piles of spaghetti code. Over the next 10 years or so, I learned from my mistakes. I discovered what worked and what didn't. I independently invented most of the common design patterns, so when I first heard what design patterns were, I was very excited to learn about them, then very disappointed that it was just a collection of names for things that I already knew intuitively. (that joke about teaching yourself C++ in 10 years isn't actually a joke)

这个故事的寓意是:编写大量的代码。就像别人说的,练习,练习,再练习。我认为,在您了解当前的设计为什么不好并寻找更好的方法之前,您不会很好地了解在哪里应用各种设计模式。设计模式书应该为您提供完善的解决方案和与其他开发人员讨论的通用术语,而不是对您不理解的问题的粘贴解决方案。

我不知道哪本书最好,但纯粹主义者可能会说《设计模式:可重用面向对象软件的元素》

至于我个人最喜欢的,我喜欢O'Reilly出版的Head First Design Patterns。它是用对话的口吻写的,很吸引我。当我阅读它时,我同时检查了我的源代码,看看它是否适用于我所阅读的内容。如果有,我就重构。我就是这样学会责任链的。

练习-练习-练习。

问自己这些问题:

他们做什么?

它们是如何耦合的?

什么时候使用它们?

什么时候不应该使用它们?

什么缺失的语言特征会让它们消失?

使用它会导致什么技术债务?

有没有更简单的方法来完成工作?

有很多很好的例子。我想补充一点:

误用。您不需要故意这样做,当您尝试在初始设计模式匹配中应用它们时,就会发生这种情况。在此期间,您将看到的每个问题似乎都恰好符合一种设计模式。通常,由于某些原因,所有问题似乎都符合相同的设计模式(Singelton是主要的候选)。

你应用这个模式就会很好。几个月后,您将需要更改代码中的某些内容,并发现使用特定的模式并不明智,因为您将自己编码到一个角落,您需要再次重构。

当然,这并不是一个真正的“做了就会在21天内学会”的答案,但以我的经验来看,这是最有可能让你对问题有一个很好的洞察的答案。

我读了三本书,仍然不能很好地理解模式,直到我读了OReilly的Head First Design patterns。这本书让我大开眼界,解释得很清楚。