Design Patterns 浅谈设计模式

像艺术一样,设计代码,体会编程之美。

Posted by Wudashan on March 15, 2017

先考虑最简单的实现,再斟酌使用设计模式。

前提

想想踏入职场已经超过半年的时间了,现在一个需求分配下来基本都能实现,但是却越发觉得自己写的代码非常的丑,简直与我这种颜值担当的靓仔不匹配。于是我潜心阅读了《Head First 设计模式(中文版)》《设计模式·可复用面向对象软件的基础》这两本书,可以说收获颇丰,这里对我这一个多月的学习进行一个总结。


《Head First 设计模式(中文版)》

这里不得不说Head First系列的书籍都是好书!因为这些书籍都是由浅入深,慢慢地从最简单的开始,而不是一上来就和你聊MVC复合模式;其次就是这些书籍基本每页都是插图,而且举的例子也生动形象,从现实生活出发。看完之后不得不给一个☆☆☆☆☆好评!如果你也和我一样,是刚开始学习设计模式,那么我强烈推荐你把这本书作为入门材料。


《设计模式·可复用面向对象软件的基础》

《Head First 设计模式(中文版)》毕竟是入门级别的书籍,想要进阶升级,这本书是少不了的。这本书将设计模式分成三种:创建型模式、结构型模式、行为型模式。对每一个模式都进行了详细的讲解。个人认为,代码示例那块不太友好,因为Java是世界上最好的语言,而它却用C++。而且书中举的例子感觉也比较陈旧,阅读的时候没有什么共鸣。我觉得,可以学习这本书如何描述一个设计模式,其他的话我保持中立态度。


设计模式的误区

在学习设计模式之后,会有一个误区,那就是学完之后,什么功能都想套一下设计模式:写一个工具类,套上单例模式;增强旧功能,套上装饰器模式等等。总觉得使用了设计模式就高大上了。 其实不然,这就好比学画画。今天学了如何画皮皮虾,明天学了如何画八神庵。等到真正创造作品的时候,全然不管是不是真的合适,就画一个八神庵骑着皮皮虾,如同胡乱的使用设计模式,既变扭也无价值。 所以,设计模式的使用前提是:先考虑最简单的实现,再斟酌使用设计模式。(敲黑板,这是重点!面试必问!)


设计原则

其实在设计如何实现功能的时候有很多原则可以参考,这里把这几个重要的原则罗列出来,在模块设计的时候作为CheckList:

  • 多用组合,少用继承;
  • 要依赖抽象,不要依赖具体类;
  • 类应该对扩展开放,对修改关闭;
  • 针对接口编程,而不是针对实现编程;
  • 一个类应该只有一个引起变化的原因;
  • 为了交互对象之间的松耦合设计而努力;
  • 一个对象应该对其他对象保持最少的了解;
  • 找出需求中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

最后

接下来的日子里,我将会对所学到的设计模式逐个讲解,敬请期待!