外观模式就是对一系列复杂的接口提供一个统一的接口,大大降低使用者使用的复杂度,使用者不用关注整个子系统的具体细节。例如你想要开发一款软件,那你就需要UI、产品、开发、测试一系列步骤,这对普通人来说是很困难的,这时软件开发公司就站了出来,你只需告诉软件开发公司你要的产品就可以了。在这个例子中UI、产品、开发、测试就是一系列复杂的接口,软件开发公司是一个统一的接口,你只需要调用统一的接口就能完成你想要的功能。
下面用代码实现外观模式的原理:
首先开发一个软件有很多子系统,UI、产品、开发、测试:
class Product {
public void analysis(){
System.out.println("产品开始分析需求");
}
}
class UI {
public void creatUi(){
System.out.println("UI开始制作");
}
}
class Code {
public void code(){
System.out.println("开发开始编码");
}
}
class Test {
public void test(){
System.out.println("测试开始测试");
}
}
此时有一个软件公司帮你做了整合:
public class Company {
private Product product = new Product();
private UI ui = new UI();
private Code code = new Code();
private Test test = new Test();
public void development(){
product.analysis();
ui.creatUi();
code.code();
test.test();
System.out.println("开发完成");
}
public static void main(String[] args) {
Company company = new Company();
company.development();
}
}
此时使用者想要开发软件只需让软件公司开发就行了,不必关心开发的细节。
结果如下图所示,只通过有一个接口就完成了整个的开发:
外观模式优点:
- 屏蔽细节,使用简单。
- 细节已经确定好,使用者关注不到细节,提高了安全性。
- 降低了子系统与使用者之间的耦合度。
外观模式缺点:
- 不符合开闭原则,修改可能需要修改源代码。