一日面试, java
...... 程序员
Hr:你对设计模式熟悉吗? 面试
应聘者A:我了解经常使用的设计模式,平时常用工厂模式和单例模式.并且我也看过一些讲23种设计模式的书.其余不经常使用的模式用的不是太熟. 设计模式
Hr:你用过外观模式吗? 框架
应聘者A:没有.可是我了解过,在书中看到过. 学习
...... spa
以上就是笔者最近一次招聘程序员的时候一段对话.只要是来应聘开发岗位的应聘者.基本我都会问以上的问题.一提设计模式,不少程序员都知道这是很重要的东西.要学,并且面试确定问.可是绝大多数的求职者在回答这个问题的时候,不约而同提到单例模式,工厂模式.而对于其余模式只知其名.并且彷佛不少公司在面试的时候只问这两种模式.由于这两种模式是SSH框架中基本原理的一部分.目前javaEE开发的大环境仍然是SSH.因此学校里的老师也只教给学生这两种模式. 设计
笔者并无以为SSH多么很差.并且笔者也在用.笔者只想讨论另外一个问题.也是困扰不少程序员的问题.如何学通设计模式.如何让设计模式再也不是高高在上理论上的存在.而真正能够融合到咱们平常的开发工做中来. 代理
上面的问答,为何笔者要问面试者外观模式.由于在笔者看来,外观模式是最不像设计模式的设计模式,常常给面试者说,只要你认真写过几天代码,就必定会用到的模式.固然GOF提出的23种设计模式中,不只仅只有外观模式简单.比方说代理模式,只要认真学过继承就必定用过.比方说简单工厂,只要写过switch语句就必定用过. 继承
那么,今天就从外观模式开始提及吧.
为何说外观模式简单,由于外观模式实际上就是把原来乱七八糟的调用整理到一块儿的过程.笔者把这个模式理解为代码重构.
举个栗子:
Class 炮兵{
Fun:开炮();//表示这是一个方法 Fun 是 function 的缩写
}
Class 枪兵{
Fun:开枪();
}
代码完成后能够很好的完成炮兵开火和枪兵开火的功能.可是后期需求提出要增长一键所有开火的功能.长官喊:士兵,开火!!.不管是什么士兵所有开火.
这个时候就须要增长一个新类,名字叫士兵.经过士兵的开火功能,把炮兵,枪兵的开火功能集中在一块儿(封装).
Class 士兵{
Fun:开火(){
炮兵.开炮
枪兵.开枪
}
}
不知道各位,是否体会到了其中的韵味.外观模式,有一种对代码进行二次封装的味道.或者说是一种自下而上式的重构技巧.是一种抽象的思惟方式.这种思惟方式在各类设计模式中基本都有体现.比方说代理模式.所以我认为,学习设计模式应该先弄懂外观模式这种思惟方式.而后看其余模式就会轻松一点.