定义:
为子系统中的一组接口提供一个一致的界面,Facede模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式的结构和说明:
Facade:定义子系统的多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系统对象。
模块:接受Facade对象的委派,真正实现功能,各个模块之间可能有交互。
由于外观模式的结构图过于抽象,因此把它稍微具体点,假设子系统内有三个模块,分别是AModule、BModule和CModule,它们分别有一个示意的方法,此时示例的整体结构如图:
示意图的示例代码:
(1)模块1的接口及实习
public interface AModelApi
{
public void testA();
}
public class AModelImpl implement AModelApi
{
public void testA()
{
System.out.println("testA");
}
}
(2)模块2的接口及实现
public interface BModelApi
{
public void testB();
}
public class BModelImpl implements BModelApi
{
public void testB()
{
System.out.println("testB");
}
}
(3)模块3的接口及实现
public interface CModelApi
{
public void testC();
}
public class CModelImpl implements CModelApi
{
public void testC()
{
System.out.println("testC");
}
}
定义外观对象:
public class Facade
{
public class test()
{
AModelApi a=new AModelImpl();
a.testA();
BModleApi b=new AModleImpl();
b.testB();
CModleApi c=new CModleImpl();
c.testC();
}
}
客户端:
public class Client
{
public static void main(String [] args)
{
Facade f=new Facade();
f.test();
}
}
外观模式的目的:
外观模式的目的不是给子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散耦合从而让外部能够更简单地使用子系统。
外观模式的调用顺序示意图:
外观模式的优点:
(1)松散耦合:外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易的扩展与维护。
外观模式的本质:
外观模式的本质是:封装交互,简化调用。
Facade封装了子系统外部和子系统内部多个模块的交互过程,从而简化了外部的调用,通过外观,子系统为外部提供了一些高层的接口,以方便她们的使用。
使用外观模式很好地体现了最少知识原则。