门面模式也叫外观模式在许多源码和实际案例中都有使用,例如后端代码框架MVC模式,slf4j源码使用等
案例
举个🌰,在大多数玄幻小说中都会出现一种法器,那就是阵盘。
传统意义上的阵法需要现场布置,需要花费不少的时间,在这个时间里敌人基本上能把你噶了,所以传统阵法对于临场对敌的作用不大。后面有修炼了阵道和器道的奇才把二者合二为一,这就是阵盘的出现。阵盘,将阵法固化在法器上使得阵法可直接使用,无需布置且不懂阵法的修士也可使用。
代码抽象
其中重要的抽象概念就是阵法和法器了,那么对阵法进行抽象使得法器上铭刻多种阵法
首先我们定义一个接口
public interface Zhenfa {
void use();
}
定义几个实现类
//金光阵
public class Jinguangzhen implements Zhenfa {
@Override
public void use() {
System.out.println("Jinguangzhen::use()");
}
}
//八卦阵
public class Baguazhen implements Zhenfa {
@Override
public void use() {
System.out.println("Baguazhen::use()");
}
}
阵盘:法器上铭刻阵法
//阵盘
public class Zhenpan {
private Zhenfa baguazhen;
private Zhenfa jinguangzhen;
public ZhenpanMaker() {
baguazhen = new Baguazhen();
jinguangzhen = new Jinguangzhen();
}
/**
* 下面定义一堆方法,具体应该调用什么方法,由这个阵盘来决定
*/
//使用金光阵
public void useJjinguanzheng(){
jinguangzhen.use();
}
//使用八卦阵
public void useBaguazheng(){
baguazhen.use();
}
}
修士使用阵盘:输入法力选择阵法即可
public static void main(String[] args) {
ZhenpanMaker zhenpanMaker = new ZhenpanMaker();
//使用更清晰且不关注底层的复杂性(例如阵法小白也能使用)
zhenpanMaker.useJinguanzhen();
zhenpanMaker.useBaguazhen();
}
门面模式的优点显而易见,客户端不再需要关注实例化时应该使用哪个实现类,直接调用门面提供的方法就可以了,因为门面类提供的方法的方法名对于客户端来说已经很友好了