写点什么

设计模式【9】-- 外观模式?没那么高大上

作者:秦怀杂货店
  • 2022 年 1 月 07 日
  • 本文字数:1363 字

    阅读完需:约 4 分钟


开局一张图,剩下全靠写...

外观模式是什么

外观模式,其实是用来隐藏系统的复杂性的,屏蔽掉了背后复杂的逻辑,向用户提供简单的可以访问系统的接口,也是属于结构型模式的一种 。


举个例子,比如我们的Java 三层MVC架构,对外提供的是controller,但是controller内部可能调用了很多service,service又调用了一些mapper,反正就是内部很复杂,但是对外只是一个接口,一个门面,外部看起来是简单的,外观很好看,实际上,你都懂。



再举个栗子,我们用的电脑,其实内部也是极其复杂的,但是我们操作的时候,已经不管内存,cpu,磁盘,显卡这些怎么工作了,甚至更加底层还有二进制,硬件之类的,我们只需要开机,做我们想做的事情,比如Ctrl+C,Ctrl+V,在美丽漂亮的界面上操作就可以了。


外观模式的角色

外观模式主要包括几个角色:


  • 外观角色:糅合多个子系统功能,对外提供一个共同的接口

  • 子系统的角色:实现系统的部分功能

  • 客户角色:通过外观角色访问各个子系统的功能

优点与缺点

优点:


  • 减少系统依赖,这里指的是对外的系统依赖

  • 提高灵活性

  • 提高安全性


缺点:


  • 把东西糅合到一个人身上,带来未知的风险

  • 增加新的子系统可能需要修改外观类或者客户端的源代码,违反了“开闭原则”

测试例子

我们以电脑为例子,先给电脑的每个部件抽象定义成为一个组件,赋予一个work()的方法:


public interface Component {    public void work();}
复制代码


再定义内存,磁盘,cpu 三种不同组件,分别实现上面的接口,各自工作:


public class Disk implements Component{    @Override    public void work() {        System.out.println("磁盘工作了...");    }}
public class CPU implements Component{ @Override public void work() { System.out.println("CPU工作了..."); }}

public class Memory implements Component{ @Override public void work() { System.out.println("内存工作了..."); }}
复制代码


然后以上组件可能是交叉在一起工作的,我们模拟一下开机过程,操作系统分别调用他们:


public class OperationSystem {    private Component disk;    private Component memory;    private Component CPU;
public OperationSystem() { this.disk = new Disk(); this.memory = new Memory(); this.CPU = new CPU(); }
public void startingUp(){ System.out.println("准备开机..."); disk.work(); memory.work(); CPU.work(); }}
复制代码


而使用人调用的其实是操作系统的开机启动方法,不会直接调用到内部的方法,也就是屏蔽掉了所有的细节:


public class PersonTest {    public static void main(String[] args) {        OperationSystem operationSystem = new OperationSystem();        operationSystem.startingUp();    }}
复制代码


执行结果如下:


准备开机...磁盘工作了...内存工作了...CPU工作了...
复制代码


最后简单小结一下,外观模式,可以成为门面模式,也就是屏蔽掉内部细节,只对外提供接口,实现所需的功能,内部功能可能很复杂,以上我们模拟的只是简单操作。学会了么?



【作者简介】


秦怀,公众号【秦怀杂货店】作者,个人网站:http://aphysia.cn,技术之路不在一时,山高水长,纵使缓慢,驰而不息。


剑指Offer全部题解PDF


开源编程笔记

发布于: 刚刚阅读数: 2
用户头像

纵使缓慢,驰而不息。 2018.05.17 加入

慢慢走,比较快。公众号:秦怀杂货店

评论

发布
暂无评论
设计模式【9】-- 外观模式?没那么高大上