概念
门面模式就是所谓的外观模式(Facade Pattern),用于隐藏系统的复杂性,只给客户端提供一个可以访问系统的接口。
介绍
如何理解:我拿一个案例来进行解释,在我们毕业季,都会有毕业论文吧,完成毕业论文是不是得经历这样一个过程:选题➡查阅文献➡编写论文➡提交,虽然这个过程比较简单,但是万一我双专业,或者读研读博,那么这四个步骤还是要每一步都要跑上好几次,假如有一家空壳公司提供这样一个系统,你只用把你的专业告诉我,我就能帮你完成毕业论文,我来帮你完成这个步骤,其中的过程你不用管,即学生只用单一地访问这个业务,而具体操作则被公司封装起来了,这就是门面模式。
优点:
1、减少系统相互依赖
2、提高灵活性
3、提高安全性
**缺点:**不符合开闭原则,如果要改东西会很麻烦,继承重写都不合适
实现
代码实现:
首先声明一个写论文过程的接口:
/**
* 定义一个完成毕业论文的过程
*/
public interface Thesis {
//首先定义选题
public void choose(String title);
//查阅文献
public void read(String context);
//编写论文
public void write();
//提交论文
public void commit();
}
再写这个过程的实现:
/**
* 写论文的具体实现
*/
public class FinishThesis implements Thesis {
@Override
public void choose(String title) {
System.out.println("我要选的题目是...." + title);
}
@Override
public void read(String context) {
System.out.println("我要查阅的文献是..." + context);
}
@Override
public void write() {
System.out.println("我要开始写....");
}
@Override
public void commit() {
System.out.println("提交完成");
}
}
在这种情况下,客户端如果要进行操作的话,代码显示十分复杂:
public class Student {
public static void main(String[] args) {
//实例化一个写论文的过程
Thesis thesis = new FinishThesis();
//写论文的四个过程
thesis.choose("java");
thesis.read("java");
thesis.write();
thesis.commit();
}
}
因此引入一家空客公司,完成这个过程的操作:
public class Business {
//实例化一个写论文的过程
private Thesis thesis = new FinishThesis();
public void operate(String subject){
//帮你选题
thesis.choose(subject);
//帮你查阅文献
thesis.read(subject);
//帮你编写论文
thesis.write();
//帮你提交论文
thesis.commit();
}
}
这个时候客户端的代码会显得十分简单:
public class Student {
public static void main(String[] args) {
//引入这家公司
Business business = new Business();
//填写自己的专业
String subject = "java";
//告诉公司,申请这个业务
business.operate(subject);
}
}
假如说现在规定,论文还需要进行查重操作,则直接在公司类上进行添加即可,客户是不用进行了解的:
/**
* 定义一个完成毕业论文的过程
*/
public interface Thesis {
//首先定义选题
public void choose(String title);
//查阅文献
public void read(String context);
//编写论文
public void write();
//进行论文查重
public void check();
//提交论文
public void commit();
}
/**
* 写论文的具体实现
*/
public class FinishThesis implements Thesis {
@Override
public void choose(String title) {
System.out.println("我要选的题目是...." + title);
}
@Override
public void read(String context) {
System.out.println("我要查阅的文献是..." + context);
}
@Override
public void write() {
System.out.println("我要开始写....");
}
//进行论文查重
@Override
public void check(){
System.out.println("查重中......");
}
@Override
public void commit() {
System.out.println("提交完成");
}
}
public class Business {
//实例化一个写论文的过程
private Thesis thesis = new FinishThesis();
public void operate(String subject){
//帮你选题
thesis.choose(subject);
//帮你查阅文献
thesis.read(subject);
//帮你编写论文
thesis.write();
//帮你论文查重
thesis.check();
//帮你提交论文
thesis.commit();
}
}
本文的代码:https://pan.baidu.com/s/1qGXVkMh-iOAG9A8bpYTWfA
提取码:yffw