一、前言
今天我们一起来学习外观模式。外观模式为用户提供一个统一的facade高层接口,我们的使用者面对仅仅就是facade这个接口,这样用户使用就显得简单,而facde下的子接口也容易扩展。自我感觉有点像我们生活中那些一键搞定的那种傻瓜式的操作模式。
二、外观模式
概述:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
使用场景:
1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。
2、定义系统的入口
外观模式为定义了一个高层的接口,而使得它的子系统更加容易使用,它是一种结构型的设计模式,外观模式减少了系统之间的依赖关系,做到了外观类和系统的解耦,但是这种设计违背了 开闭原则,如果要修改东西会显得很麻烦。
三、代码展示
我们通过一个小例子来演示外观模式,系统只向外提供了一个高层的facade接口。用户只需要关心facade接口即可。
3.1 定义一个计算接口
public interface CalculateBase {
public void calc();
}
3.2 创建两个服务实现类
public class ServiceA implements CalculateBase {
@Override
public void calc() {
// TODO Auto-generated method stub
System.out.println("服务A 的计算");
}
}
public class ServiceB implements CalculateBase {
@Override
public void calc() {
// TODO Auto-generated method stub
System.out.println("服务B 的计算");
}
}
3.3 定义一个 facede的高层接口
public class Facade {
private CalculateBase calculateBase;
public Facade(int calcType)
{
createSerivce( calcType);
}
public void calc()
{
if(calculateBase == null)
{
System.out.println("暂无服务支持");
return;
}
calculateBase.calc();
}
private void createSerivce(int calcType)
{
switch (calcType) {
case 1:
this.calculateBase = new ServiceA();
break;
case 2:
this.calculateBase = new ServiceB();
break;
default:
break;
}
}
}
3.4 用户只需要关心高层接口即可
public class Test {
public static void main(String[] args) {
Facade facade = new Facade(1);
facade.calc();
Facade facade1 = new Facade(2);
facade1.calc();
Facade facade2 = new Facade(3);
facade2.calc();
}
}
结果输出
服务A 的计算
服务B 的计算
暂无服务支持