背景
一般想DIY电脑个性人配置,要么自己来组装(很费劲),要么买在电脑城买好组件找师师傅帮你装,不用理那么多,而外观模式就是类似这种为你组装好的人员。
外观模式是什么?
外观模式也叫门面模式,是一种系统与外部之间通信通过一个统一的门面对象进行。
外观模式可以干嘛?
主要解决不同系统之间交互,由统一的入口(门面)来进行交互,这样使用系统之间互相通信复杂降低,并且也不需要去知道其他系统的具体实现及业务,可以降低系统一系统之间的复杂度。
优点:
低耦合高灵活:减少系统之间的相互依赖;
高内聚:有问题外部也是不知道的,只会怪接口,所以内部好处理掉这些问题。
缺点:
不符合开闭原则,增删改可能影响原来功能和流程;
外观模式类图
实现代码
/**
* @Auther: csh
* @Date: 2020/5/29 11:20
* @Description:抽象组件
*/
public interface IModule {
//安装组件
void installModule();
}
/**
* @Auther: csh
* @Date: 2020/5/29 11:21
* @Description:CPU
*/
public class Cpu implements IModule {
@Override
public void installModule() {
System.out.println("安装CPU");
}
}
/**
* @Auther: csh
* @Date: 2020/5/29 11:22
* @Description:显示器
*/
public class Displayer implements IModule {
@Override
public void installModule() {
System.out.println("安装显示器");
}
}
/**
* @Auther: csh
* @Date: 2020/5/29 11:22
* @Description:
*/
public class MemoryBank implements IModule {
@Override
public void installModule() {
System.out.println("内存条");
}
}
/**
* @Auther: csh
* @Date: 2020/5/29 11:23
* @Description:其他组件
*/
public class Other implements IModule {
@Override
public void installModule() {
System.out.println("安装其他组件 键盘、鼠标、硬盘等");
}
}
/**
* @Auther: csh
* @Date: 2020/5/29 11:23
* @Description:构建者
*/
public class ComputerMarker {
private Cpu cpu;
private Displayer displayer;
private MemoryBank memoryBank;
private Other other;
public ComputerMarker() {
this.cpu = new Cpu();
this.displayer = new Displayer();
this.memoryBank = new MemoryBank();
this.other = new Other();
}
public void installCput(){
cpu.installModule();
}
public void installDisplayer(){
displayer.installModule();
}
public void installMemoryBank(){
memoryBank.installModule();
}
public void installOther(){
other.installModule();
}
}
/**
* @Auther: csh
* @Date: 2020/5/29 11:26
* @Description:安装电脑
*/
public class Client {
public static void main(String[] args) {
ComputerMarker computerMarker = new ComputerMarker();
computerMarker.installCput();
computerMarker.installDisplayer();
computerMarker.installMemoryBank();
computerMarker.installOther();
System.out.println("电脑装好了直接拿回家!");
}
}
结果
安装CPU
安装显示器
内存条
安装其他组件 键盘、鼠标、硬盘等
电脑装好了直接拿回家!
最后
门面模式,存在的最大缺陷就是不符合开闭原则,一但要新增删原有的东西,真的很麻烦,并且还可能影响到原来的功能或流程,所以这个模式,利弊都挺大的,特别是项目迭代非常快,用到这个模式就很坑爹,如果像是稳定的接系统,系统与系统之间内部都很复杂,并且双方之间关系藕断丝连,就可以抽出一个统一接口(门面),倒是一个不错的选择。