标签:
客户端为了完成某个功能,需要去调用某个系统的多个模块,把它们称为模块A,模块B,模块C。对于客户端而言,那就需要知道A,B,C这三个模块的功能,还需要知道如何组合这多个模块提供的功能来实现自己所需要的功能。
如何实现,才能使客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而不用客户端与子系统内部的多个模块交互呢?
外观模式:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
代码:
Facade类相当于A,B,C模块的外观界面,Facade类也被称为A,B,C模块对外的接口。
/**
* A模块的接口
*/
public interface AModuleApi {
/**
* 示意方法,A模块对外的一个功能方法
*/
public void testA();
}
public class AModuleImpl implements AModuleApi{
public void testA() {
System.out.println("现在在A模块里面操作testA方法");
}
}
public interface BModuleApi {
public void testB();
}
public class BModuleImpl implements BModuleApi{
public void testB() {
System.out.println("现在在B模块里面操作testB方法");
}
}
public interface CModuleApi {
public void testC();
}
public class CModuleImpl implements CModuleApi{
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) {
// //不用Facade,需要自己跟多个模块交互
// AModuleApi a = new AModuleImpl();
// a.testA();
// BModuleApi b = new BModuleImpl();
// b.testB();
// CModuleApi c = new CModuleImpl();
// c.testC();
//
// System.out.println("使用Facade----------------------〉");
//使用了Facade
new Facade().test();
}
}
外观模式的目的不是给子系统添加新的功能接口,而是为了让外部减少与子系统多个模块的交互,松散耦合,从而让外部能够更简单地使用子系统。
外观模式的本质是:封装交互,简化调用
标签:
原文地址:http://blog.csdn.net/jiangxishidayuan/article/details/51867776