对于一个复杂的系统,可能需要多个业务才能完成,如把大象关进冰箱里面
public interface IServiceA {
void methodA();
}
public interface IServiceB {
void methodB();
}
public class ServiceAImpl implements IServiceA {
@Override
public void methodA() {
System.out.println("打开冰箱门");
}
}
public class ServiceBImpl implements IServiceB {
@Override
public void methodB() {
System.out.println("关闭冰箱门");
}
}
这种情况下,使用者必须知道系统各个业务的具体功能及先后顺序才能使用
public class Test {
public static void main(String[] args) {
IServiceA sa = new ServiceAImpl();
IServiceB sb = new ServiceBImpl();
sa.methodA();
sb.methodB();
}
}
下面我们定义一个类,对子系统进行封装,以简化子系统调用
/**
* 给一组组件,接口,抽象,或者子系统提供一个简单的访问接口
*/
public class Facade {
private IServiceA sa;
private IServiceB sb;
private IServiceC sc;
public Facade() {
sa = new ServiceAImpl();
sb = new ServiceBImpl();
sc = new ServiceCImpl();
}
/**
* 把大象装到冰箱里面
*/
public void storeElephantidae() {
sa.methodA();
sb.methodB();
}
/**
* 把大象装到冰箱里面,并冷冻起来
*/
public void storeElephantidae2() {
sa.methodA();
sb.methodB();
sc.methodC();
}
}
这是一个很好的封装方法,如果一个子系统比较复杂的话,就可以封装出一个或多个门面出来,可以使项目的结构更简单,而且扩展性非常好。
public class Test {
public static void main(String[] args) {
IServiceA sa = new ServiceAImpl();
IServiceB sb = new ServiceBImpl();
sa.methodA();
sb.methodB();
System.out.println("================");
Facade facade = new Facade();
facade.storeElephantidae();
System.out.println("================");
facade.storeElephantidae2();
}
}