设计模式什么的哪有那么神秘 ----第一集 一些吐槽和重构的韵味
2013-08-04 06:35
495 查看
一日面试,
......
Hr:你对设计模式熟悉吗?
应聘者A:我了解常用的设计模式,平时经常使用工厂模式和单例模式.而且我也看过一些讲23种设计模式的书.其他不常用的模式用的不是太熟.
Hr:你用过外观模式吗?
应聘者A:没有.但是我了解过,在书中看到过.
......
以上就是笔者最近一次招聘程序员的时候一段对话.只要是来应聘开发岗位的应聘者.基本我都会问以上的问题.一提设计模式,很多程序员都知道这是很重要的东西.要学,而且面试肯定问.但是绝大多数的求职者在回答这个问题的时候,不约而同提到单例模式,工厂模式.而对于其他模式只知其名.而且似乎很多公司在面试的时候只问这两种模式.因为这两种模式是SSH框架中基本原理的一部分.目前javaEE开发的大环境仍然是SSH.所以学校里的老师也只教给学生这两种模式.
笔者并没有觉得SSH多么不好.而且笔者也在用.笔者只想讨论另一个问题.也是困扰很多程序员的问题.如何学通设计模式.如何让设计模式不再是高高在上理论上的存在.而真正可以融合到我们日常的开发工作中来.
上面的问答,为什么笔者要问面试者外观模式.因为在笔者看来,外观模式是最不像设计模式的设计模式,经常给面试者说,只要你认真写过几天代码,就一定会用到的模式.当然GOF提出的23种设计模式中,不仅仅只有外观模式简单.比方说代理模式,只要认真学过继承就一定用过.比方说简单工厂,只要写过switch语句就一定用过.
那么,今天就从外观模式开始说起吧.
为什么说外观模式简单,因为外观模式实际上就是把原来乱七八糟的调用整理到一起的过程.笔者把这个模式理解为代码重构.
举个栗子:
Class 炮兵{
Fun:开炮();//表示这是一个方法 Fun 是 function 的缩写
}
Class 枪兵{
Fun:开枪();
}
代码完成后可以很好的完成炮兵开火和枪兵开火的功能.但是后期需求提出要增加一键全部开火的功能.长官喊:士兵,开火!!.无论是什么士兵全部开火.
这个时候就需要增加一个新类,名字叫士兵.通过士兵的开火功能,把炮兵,枪兵的开火功能集中在一起(封装).
Class 士兵{
Fun:开火(){
炮兵.开炮
枪兵.开枪
}
}
不知道各位,是否体会到了其中的韵味.外观模式,有一种对代码进行二次封装的味道.或者说是一种自下而上式的重构技巧.是一种抽象的思维方式.这种思维方式在各种设计模式中基本都有体现.比方说代理模式.因此我认为,学习设计模式应该先弄懂外观模式这种思维方式.然后看其他模式就会轻松一点.
......
Hr:你对设计模式熟悉吗?
应聘者A:我了解常用的设计模式,平时经常使用工厂模式和单例模式.而且我也看过一些讲23种设计模式的书.其他不常用的模式用的不是太熟.
Hr:你用过外观模式吗?
应聘者A:没有.但是我了解过,在书中看到过.
......
以上就是笔者最近一次招聘程序员的时候一段对话.只要是来应聘开发岗位的应聘者.基本我都会问以上的问题.一提设计模式,很多程序员都知道这是很重要的东西.要学,而且面试肯定问.但是绝大多数的求职者在回答这个问题的时候,不约而同提到单例模式,工厂模式.而对于其他模式只知其名.而且似乎很多公司在面试的时候只问这两种模式.因为这两种模式是SSH框架中基本原理的一部分.目前javaEE开发的大环境仍然是SSH.所以学校里的老师也只教给学生这两种模式.
笔者并没有觉得SSH多么不好.而且笔者也在用.笔者只想讨论另一个问题.也是困扰很多程序员的问题.如何学通设计模式.如何让设计模式不再是高高在上理论上的存在.而真正可以融合到我们日常的开发工作中来.
上面的问答,为什么笔者要问面试者外观模式.因为在笔者看来,外观模式是最不像设计模式的设计模式,经常给面试者说,只要你认真写过几天代码,就一定会用到的模式.当然GOF提出的23种设计模式中,不仅仅只有外观模式简单.比方说代理模式,只要认真学过继承就一定用过.比方说简单工厂,只要写过switch语句就一定用过.
那么,今天就从外观模式开始说起吧.
为什么说外观模式简单,因为外观模式实际上就是把原来乱七八糟的调用整理到一起的过程.笔者把这个模式理解为代码重构.
举个栗子:
Class 炮兵{
Fun:开炮();//表示这是一个方法 Fun 是 function 的缩写
}
Class 枪兵{
Fun:开枪();
}
代码完成后可以很好的完成炮兵开火和枪兵开火的功能.但是后期需求提出要增加一键全部开火的功能.长官喊:士兵,开火!!.无论是什么士兵全部开火.
这个时候就需要增加一个新类,名字叫士兵.通过士兵的开火功能,把炮兵,枪兵的开火功能集中在一起(封装).
Class 士兵{
Fun:开火(){
炮兵.开炮
枪兵.开枪
}
}
不知道各位,是否体会到了其中的韵味.外观模式,有一种对代码进行二次封装的味道.或者说是一种自下而上式的重构技巧.是一种抽象的思维方式.这种思维方式在各种设计模式中基本都有体现.比方说代理模式.因此我认为,学习设计模式应该先弄懂外观模式这种思维方式.然后看其他模式就会轻松一点.
相关文章推荐
- 设计模式什么的哪有那么神秘 --开篇吐槽
- 设计模式什么的哪有那么神秘 ----第二集 函数传值
- 设计模式什么的哪有那么神秘 ----第三集 创建延后
- 在重构的过程中,什么情况下应该使用设计模式?应该用哪种模式?
- 【JS设计模式】装饰者模式和组合模式两者很像,那么这二者之间又有什么区别呢?
- 从Java的角度理解设计模式1:什么是重构
- 对《敏捷软件开发:原则、模式与实践》中保龄球程序重构的一些思考
- 学习设计模式的一些心得
- 什么是设计模式
- 重构,设计模式和设计
- 什么是设计模式
- 设计模式的一些理解
- 一些常用的设计模式(装饰者模式)
- [js高手之路]设计模式系列课程-发布者,订阅者重构购物车
- 什么是框架,框架和设计模式的关系,为什么要用框架
- 我对一些设计模式的理解