定义:外观模式是软件工程中常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口。这一接口使得子系统更加容易使用。
controller和dao之间的service层就是facade.
先定三个接口
public interface Sub1 {
void function1();
}
public interface Sub2 {
void function2();
}
public interface Sub3 {
void function4();
}
添加实现
public class Sub1Impl implements Sub1 {
@Override
public void function1() {
System.out.println("子系统中Sub1接口的功能");
}
}
public class Sub2Impl implements Sub2 {
@Override
public void function2() {
System.out.println("子系统中Sub2接口的功能");
}
}
public class Sub3Impl implements Sub3 {
@Override
public void function3() {
System.out.println("子系统中Sub3接口的功能");
}
}
定义外观接口
public interface Facade {
/* 下面随便组装几个功能 */
void function12();
void function23();
void function123();
}
实现外观接口
public class FacadeImpl implements Facade {
private Sub1 sub1;
private Sub2 sub2;
private Sub3 sub3;
public FacadeImpl() {
super();
this.sub1 = new Sub1Impl();
this.sub2 = new Sub2Impl();
this.sub3 = new Sub3Impl();
}
public FacadeImpl(Sub1 sub1, Sub2 sub2, Sub3 sub3) {
super();
this.sub1 = sub1;
this.sub2 = sub2;
this.sub3 = sub3;
}
@Override
public void function12() {
sub1.function1();
sub2.function2();
}
@Override
public void function23() {
sub2.function2();
sub3.function3();
}
@Override
public void function123() {
sub1.function1();
sub2.function2();
sub3.function3();
}
}
测试
public class Test {
public static void main(String[] args) {
Facade facade = new FacadeImpl();
facade.function12();
System.out.println("-------------------------");
facade.function23();
System.out.println("-------------------------");
facade.function123();
/* 以上为使用了外观模式的调用方式,以下为原始方式 */
System.out.println("-------------以下原始方式--------------");
Sub1 sub1 = new Sub1Impl();
Sub2 sub2 = new Sub2Impl();
Sub3 sub3 = new Sub3Impl();
sub1.function1();
sub2.function2();
System.out.println("-------------------------");
sub2.function2();
sub3.function3();
System.out.println("-------------------------");
sub1.function1();
sub2.function2();
sub3.function3();
}
}
结果
子系统中Sub1接口的功能
子系统中Sub2接口的功能
-------------------------
子系统中Sub2接口的功能
子系统中Sub3接口的功能
-------------------------
子系统中Sub1接口的功能
子系统中Sub2接口的功能
子系统中Sub3接口的功能
-------------以下原始方式--------------
子系统中Sub1接口的功能
子系统中Sub2接口的功能
-------------------------
子系统中Sub2接口的功能
子系统中Sub3接口的功能
-------------------------
子系统中Sub1接口的功能
子系统中Sub2接口的功能
子系统中Sub3接口的功能