java设计模式之Facade模式
来源:互联网 发布:python gnureadline 编辑:程序博客网 时间:2024/05/21 10:47
关于Facade模式,有人翻译为外观模式,有人翻译为门面模式。我最早接触这种设计模式是在杭州的时候,那个时候服务端的Facade层主要有2个作用,一个是提供给Flex客户端的接口用。一个是作为包含多个service操作的统一接口。GoF《设计模式》中说道:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。其实大多数人对于Facade层的理解是为多个复杂的动作提供一个入口。
来看一个网上广为流传的例子:
比如有一个抽屉,里面存放了很大的重要文件,我们称这个抽屉为第二个抽屉,它的钥匙放在另一个抽屉,我们称之为第一个抽屉,只有拿到第一个抽屉里的钥匙,才能打开第二个抽屉。
[java] view plaincopy
package com.howlaa.facadeMode;
/**
* 抽屉一
* @author howlaa
*/
public class DrawerOne {
public String open(){
System.out.println("第一个抽屉打开...");
return getKey();
}
public String getKey(){
System.out.println("得到第二个抽屉的钥匙...");
return "钥匙";
}
}
[java] view plaincopy
package com.howlaa.facadeMode;
/**
* 抽屉二
* @author howlaa
*/
public class DrawerTwo {
public void open(String key){
if("钥匙".equals(key)){
System.out.println("第二个抽屉打开...");
getFile();
}else
{
System.out.println("钥匙不匹配,不法打开第二个抽屉...");
return ;
}
}
public void getFile(){
System.out.println("取得重要文件...");
}
}
现在我们来看下,当不使用Facade模式时,客户端如果用户想拿到这个重要文件是怎样的:
[java] view plaincopy
package com.howlaa.facadeMode;
import org.junit.Test;
/**
* 客户端
* @author howlaa
*
*/
public class Client {
/*-------当未使用Facade模式时---------*/
@Test
public void NotUseFacade(){
DrawerOne drawerOne = new DrawerOne();
String key = drawerOne.open();
DrawerTwo drawerTwo = new DrawerTwo();
drawerTwo.open(key);
}
/*-------end 未使用Facade模式---------*/
}
可以看到,用户必须先去打开第一个抽屉,才能用这个钥匙去打开第二个抽屉。在实际中,可能用户不知道这个必要条件。他只知道他需要的就是打开抽屉,然后拿到文件。我们来看下使用Facade模式时的状况:
首先,我们需要新建一个Facade类:
[java] view plaincopy
package com.howlaa.facadeMode;
public class DrawerFacade {
DrawerOne drawerOne = new DrawerOne();
DrawerTwo drawerTwo = new DrawerTwo();
public void open(){
String key = drawerOne.open();
drawerTwo.open(key);
}
}
然后看下客户端的操作:
[java] view plaincopy
package com.howlaa.facadeMode;
import org.junit.Test;
/**
* 客户端
* @author howlaa
*
*/
public class Client {
/*--------使用Facade模式--------------*/
@Test
public void UseFacade(){
DrawerFacade drawerFacade = new DrawerFacade();
drawerFacade.open();
}
/*--------end 使用Facade模式----------*/
}这里可以看到,客户端的用户只是做了打开,拿文件的操作。服务端怎么操作的,他无须关心。
本文来源: http://blog.csdn.net/howlaa/article/details/12775077
- Java设计模式之Facade模式
- Java设计模式之Facade模式
- java设计模式之外观模式Facade
- JAVA设计模式之外观(Facade)模式
- java设计模式之Facade模式
- java设计模式之Facade模式
- java设计模式之外观模式Facade
- 设计模式之Facade
- 设计模式之Facade
- 设计模式之Facade
- 设计模式之Facade
- 设计模式之Facade
- 设计模式之Facade
- 设计模式之Facade
- 设计模式 之 Facade
- JAVA设计模式-Facade
- 设计模式之Facade模式
- 设计模式之facade模式
- Lightoj 1011 记忆化搜索
- 客户端代码事例
- 在后台(cs)代码中更改页面元素样式
- 虚拟机32位Ubutun下安装jdk7
- poj1062 昂贵的葬礼 最短路 djikstra
- java设计模式之Facade模式
- 犀牛和gh的多线程问题
- friso-1.4.0 发布 - 英文同义词追加+中英任意组合识别+小数单位识别
- Android之Activity
- C#反射读取类定制特性信息
- centos6文本模式更新为图形模式
- GH的热键,只要用gh都要拜读一下吧
- Leetcode Roman to Integer
- jcseg-1.9.0 发布 - 英文同义词追加+中英任意组合识别