00:00
Java设计模式之外观模式。那同学我们来看一下外观模式,它是一个怎么样的设计模式,首先呢,仍然给大家提一个需求,是影院管理的一个项目,所以现在呢,我们要组建一个家庭影院,各位那家庭影院里面呢,有这样一系列的设备。对吧,有播放DVD的播放器,然后呢,投影仪,自动屏幕,立体声爆米花机等等等等。那现在呢,我们要去想,我们要去操作这个家庭影院呢,它的一个过程是这样子的。首先呢,用一个遥控器,我们有遥控器不停的,因为因为每个设备,就是每个设备都会有个遥控器嘛,比如说DVD有个遥控器啊,投影仪也有一个遥控器,自动屏幕也有一个遥控器,OK,那我就手上拿了一堆遥控器,对不对。我拿了一堆遥控器,我怎么办呢?首先我开爆米花机,放下屏幕,开投影仪,开音箱,开DVD。
01:08
去拿爆米花,因为爆米花机刚刚开打开了,打开我就可以去取爆米花了,然后调完灯光播放,播放结束以后呢,关闭各种设备,各位大家想这样子去做。当然可以去用我们家庭影院,但是你有没有想过,因为你现在设备很多,你的设备很多,你的设备这么多,那就意味着你有这么多的遥控器,你每一个都去点一下,你是不是觉得很累啊?那如果这样子的话呢,我们就设计出对应的传统方式解决的这个影院管理,那就意味着我可能会这样去写,我写一个client客户端,那么在这个客户端呢,我创建相关的各个设备的对象,然后调用创建的各个对象的一系列方法,比如说开关,开关等等。OK,那也就是说相当于说我这有一个client test这个类,那这个类呢,它会直接依赖我们各个设备,那大家大家看到我们各个设备呢,都有自己相应的操作,比如说DVDDVD这个播放器呢,它有开关。
02:15
还有播放暂停和这个set DVD的这个频频道等等,包括我们这个投影仪也是有开关,然后呢聚聚焦,还有一个放大等等。那同学们想,我们这个传统方案显然是可以用的,没有任何问题,但是你们有没有发现,将来我们这个client端再去操作这些不同的设备的时候,这个流程会变的比较的复杂,而且呢?它不具备我们这个相应的灵活的改变,因为你这一只要有一个设备要发生变化,我们这段代码就会去去修改是不是。OK。那我们来分析一下传统。
03:00
方案解决的,呃,传统方方式呢有哪些问题,首先第一个client test test的这个main方法中呢,会创建各个子系统的对象,并直接去调用子系统的对象,会造成调用过程的混乱,没有清晰的过程,确实如此,你想你这个过程有七八部,那你就会调七八个这个这个子系统的方法太麻烦了。第二个不利于维护子系统的操作。比如说有一个子系统坏了,或者比如说有一个子系统出了问题,那你你得看这个源码很麻烦。那么我们解决思路也非常简单,是这样子的,同学们想我们定义一个高层的接口。OK,这个高层接口呢,其实就是你可以理解成是一个类,然后给这个子系统中的一组接口呢,提供一个一致化的界面。比如说,我们在高层接口提供四个方法,Ready准备、play播放、pass、暂停、end结束。然后我在这个这四个方法里边去用来访问子系统的一用来访问子系统中,子系统中的一群接口就可以了。
04:08
也就是说我们通过定义一个一致的接口,这个接口其实就是刚才我们所说的可能是个界面类,为什么它叫界面设计模式,就这么来的。就是我们呈现给用户的就是一个界面类,用于屏蔽内部子系统的细节。然后使得调用端只跟我们这个接口发生调用,而无需关心子系统的内部实现。待会呢,我们通过这个实现,你们会看到他的一种核心思想,好呃,那核心思想就就是类似于这样一种感觉,我们这有很多的设备。那么原先呢,我们是让这个客户端直接去调用各个设备。这样造成我们客户端很麻烦,怎么办呢?OK,那现在太简单了,中间做一层。然后让让这一层去完成相应的操作,我们客户端只掉他就行了。
05:05
OK,大致是这样一种含义,那这个就是我们这一个影院管理的传统方式的一个设计的方案,以及它问题的。111个分析好,那既然我们传统方法去解决这个音乐有问题,那么下面呢,我们就来看一看用。我们这一个外观模式怎么去解决刚才提出的这个需求?
我来说两句