亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述设计模式-- 外观模式?没那么高大上相关的知识,希望能为你提供帮助。
开局一张图,剩下全靠写...
外观模式是什么外观模式,其实是用来隐藏系统的复杂性的,屏蔽掉了背后复杂的逻辑,向用户提供简单的可以访问系统的接口,也是属于结构型模式的一种 。举个例子,比如我们的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
??开源编程笔记??
推荐阅读
- oeasy教您玩转vim - 84 - #命令command
- 如何实现vSphere Replication 负载均衡
- 在页面模板中按类别获取自定义帖子类型
- 用php文件生成css文件
- 通过CSS/jQuery生成WordPress粘性页脚
- 表单操作-自定义网址
- 找不到函数”parent_theme_locations”或函数名称无效
- 过滤” the_content”,但带有高级自定义字段
- 过滤”当前菜单项”类以使用”活动”