1.定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
2.代码部分
public interface AModuleApi {
public void testA();
}
public class AModuleImpl implements AModuleApi {
@Override
public void testA() {
System.out.println("现在在A模块里面操作testA方法。");
}
}
public interface BModuleApi {
public void testB();
}
public class BModuleImpl implements BModuleApi {
@Override
public void testB() {
System.out.println("现在在B模块里面操作testB方法。");
}
}
public interface CModuleApi {
public void testC();
}
public class CModuleImpl implements CModuleApi {
@Override
public void testC() {
System.out.println("现在在C模块里面操作testC方法。");
}
}
public class Facade {
public void test() {
AModuleApi a = new AModuleImpl();
a.testA();
BModuleApi b = new BModuleImpl();
b.testB();
CModuleApi c = new CModuleImpl();
c.testC();
}
}
public class Client {
public static void main(String[] args) {
new Facade().test();
}
}
3.外观模式解读
外观模式的目的不是给子系统添加新的功能接口,而是为了让外部系统减少与子系统内多个模块的交互,
松散耦合,从而让外部能够更简单地使用子系统。
4.外观模式的本质 --- 封装交互,简化调用。
外观模式很好地体现了“最少知识原则”。
5.外观模式适用场景
如果你希望为一个复杂的子系统提供一个简单接口的时候,可以考虑使用外观模式。
使用外观对象来实现大部分客户需要的功能,从而简化客户的使用。
如果想要让客户程序和抽象类的实现部分松散耦合,可以考虑使用外观模式,使用外观对象来将这个子系统与它的客户分离开来,从而提高子系统的独立性和可移植性。