声明:
本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/*
* 百度百科的定义:
* Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,
* 隐藏子系统的复杂性,使子系统更加容易使用。他是为子系统中的一组接口所提供的一个一致的界面
*
* 可简单地将外观模式理解为
* 将复杂子系统的各种接口(方法)统一成一个方法
* (对客户来说只是一个业务操作,但这操作可能是由各子系统协调共同完成)提供给客户使用,达到方便和安全的效果
*
* 比如客户端要做某个操作(传递了参数p):doSomething(Parameter p),那我们就直接定义一个doSomething(Parameter p)的Facade
* 这样,客户可以按他的理解和要求直接调用;我们可以在Facade里的doSomething调用各个子系统来完成这个功能而不必暴露给客户端
* 也避免客户端和子系统打交道,达到解耦的效果
*/
interface IModuleA {
void testA();
//这个方法可以在Facade里面决定是否暴露给客户
void hiddenTestA();
}
interface IModuleB {
void testB();
}
interface IModuleC {
void testC();
}
interface IFacade {
void testForClient();
}
class ModuleA implements IModuleA {
public void testA() {
System.out.println("test A");
}
public void hiddenTestA() {
System.out.println("hiddenTest A");
}
}
class ModuleB implements IModuleB {
public void testB() {
System.out.println("test B");
}
}
class ModuleC implements IModuleC {
public void testC() {
System.out.println("test C");
}
}
class Facade implements IFacade {
boolean show = false;
public void testForClient() {
IModuleA a = new ModuleA();
a.testA();
if (show) {
a.hiddenTestA();
}
IModuleB b = new ModuleB();
b.testB();
IModuleC c = new ModuleC();
c.testC();
}
}
public class FacadePattern {
public static void main(String[] args) {
IFacade facade = new Facade();
facade.testForClient();
}
}