外观模式其实很好理解的,就是将表面的东西展示给人看,内部的东西你不知道的(因为已经封装好了),比如一个外部系统要和公司内部5个系统进行交互,而这5个系统之间也有交互,那么第一种就是外部系统和5个系统都进行交互;第二种就是做一个接口将外部系统需要的逻辑封装成一个方法,该方法中包含了关于5个系统的交互方式,这样外部系统就不用直接和5个系统交互了,直接调用接口完事。外观模式也叫门面模式,其实说白了就是把要用的东西封装起来使交互更加方便。
外观模式定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
<<大话设计模式>>在这章节中以买股票为故事情节展开的,说买股票需要学习很多知识,一个不懂股票的人买会吃亏,所以不如买基金,基金是有职业经理人去操作,用外观模式来说的话,职业经理人就是门面,关于钱如何进行投资自己不关心,自己关心的是挣钱了没有。
差不多理解了外观模式了,小二,该上代码了。
1、系统1和2,就是客户端不关心与系统1、2交互
public class SubSystemOne {
public void method(){
System.out.println("这是系统1");
}
}
public class SubSystemTwo {
public void method(){
System.out.println("这是系统2");
}
}
2外观类,将客户端要交互的系统逻辑封装
public class Facade {
SubSystemOne one;
SubSystemTwo two;
public Facade(){
one = new SubSystemOne();
two = new SubSystemTwo();
}
//要处理的逻辑,将外部系统与one、two系统交互的逻辑放这里,外部系统就不用和one、two交互了,直接与外观类交互
public void method(){
one.method();
two.method();
}
}
3、客户端
public class FacadeClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
//直接与外观类交互,在此看不到one、two系统
Facade facade = new Facade();
facade.method();
}
}
看到客户端直接和门面类Façade交互就OK了,根本不知道系统1、2类的存在。这就是传说中的外观模式,没用过不知道,学习了感觉也就那样
附上模式结构图
总结:对于复杂难以维护的老系统,直接去改或去扩展都可能产生很多的问题,那么我们如果去开法一个Façade与老系统的交互,那么以后直接开发新系统调用这个接口就可以了,这就是外观模式,一个低调而又美丽的人……