标签:
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。
Facade门面对象:
封装子系统的意义:
- 跟踪系统的使用情况:通过强制所有对系统的访问都必须经过Facade,可以很容易地监视系统的使用情况
- 改换系统:未来可能需要改换系统。通过将原系统作为Facade类的一个私有成员,可以最省力地切换到新系统
Sub Systems子系统角色:
比如我们平时在使用电脑时,桌面上的文件的快捷方式(或者是一个执行文件),我们需要做的操作只是打开和关闭,通常情况下完全不需要考虑用什么打开啊,设置什么参数啊,关闭的时候应该如何销毁资源才能保证程序的数据能够不造成损失….这个可执行文件就可以看做是一个门面。因为它极大地简化了我们的操作,而且我们可以完全忽略和子系统之间的交互,而简单地认为我是在和一个完整的系统进行交互。
下面提供一个打开文件操作的实现来说明一下,门面模式到底是个什么样:
class OpenWord{
boolean isOpen;
String name = "Viewer";
OpenWord(){
isOpen = false;
}
void open(){
System.out.println("The " + name + " is opening....");
isOpen = true;
}
void stop(){
System.out.println("The " + name + " is closing....");
isOpen = false;
}
}
class PrepareFileSystem{
boolean isOpen;
String name = "FileSystem";
PrepareFileSystem(){
isOpen = false;
}
void open1(){
System.out.println("The " + name + " is opening....");
isOpen = true;
}
void stop1(){
System.out.println("The " + name + " is closing....");
isOpen = false;
}
}
class OperateFile{
void showFile ( String name ){
System.out.println("Show the content of the file: " + name);
}
}
上述都是为了实现Facade,所以不用太在意,当作提供功能的接口类即可。
public class OpenFileFacade {
//必须是私有成员,否则会将子系统暴露给外部
private OpenWord openWord = new OpenWord();
private PrepareFileSystem prepareFileSystem = new PrepareFileSystem();
private OperateFile operateFile = new OperateFile();
//只是提供一条访问路径,不实现业务逻辑
public void openFile ( String name ){
prepareFileSystem.open1();
openWord.open();
operateFile.showFile( name );
}
public void closeFile ( String name ){
openWord.stop();
prepareFileSystem.stop1();
}
public static void main ( String [] args ){
OpenFileFacade a = new OpenFileFacade();
a.openFile("cookBook");
a.closeFile("cookBook");
}
}
Java设计模式(四) Facade(门面)模式及Tomcat引申
标签:
原文地址:http://blog.csdn.net/qq_24451605/article/details/51242128