设计模式-外观模式

上文(设计模式-装饰器模式):https://blog.csdn.net/qq_16498553/article/details/106562454


背景

一般想DIY电脑个性人配置,要么自己来组装(很费劲),要么买在电脑城买好组件找师师傅帮你装,不用理那么多,而外观模式就是类似这种为你组装好的人员。

外观模式是什么?

外观模式也叫门面模式,是一种系统与外部之间通信通过一个统一的门面对象进行。

外观模式可以干嘛?

主要解决不同系统之间交互,由统一的入口(门面)来进行交互,这样使用系统之间互相通信复杂降低,并且也不需要去知道其他系统的具体实现及业务,可以降低系统一系统之间的复杂度。

优点:

低耦合高灵活:减少系统之间的相互依赖;

高内聚:有问题外部也是不知道的,只会怪接口,所以内部好处理掉这些问题。

缺点:

不符合开闭原则,增删改可能影响原来功能和流程;

外观模式​类图

设计模式-外观模式_第1张图片

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

实现代码

/**
 * @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
安装显示器
内存条
安装其他组件 键盘、鼠标、硬盘等
电脑装好了直接拿回家!

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

最后

门面模式,存在的最大缺陷就是不符合开闭原则,一但要新增删原有的东西,真的很麻烦,并且还可能影响到原来的功能或流程,所以这个模式,利弊都挺大的,特别是项目迭代非常快,用到这个模式就很坑爹,如果像是稳定的接系统,系统与系统之间内部都很复杂,并且双方之间关系藕断丝连,就可以抽出一个统一接口(门面),倒是一个不错的选择。

 

你可能感兴趣的:(设计模式)