00:01
用外观模式我们来解决一下。影院管理,那同学们可以看到啊,就是我们传统的方式解决这个影院管理呢,比较麻烦,所以说我们可以像这样去考虑。就说我们会提供一个。这个外观外观类在这个外观类里面,外观类里面去,呃调用我们子系统内,如果子系统之间有相互比较复杂的调用呢,由他们自身去完成,而对外面对客户来来说呢,我们就展现一个外观内的接口就可以了,他调这个方法完成相应的任务,所以说外观模式呢,就是解决多个复杂接口带来的使用困难,简化用户的操作,对不对。因为你想一想,这个子系统之间也有可能相互调用,所以说有你们自己去搞定,而外观内呢,咱们只关心的是一些简单的一个接口调用就完事了,好,同学们,那现在我们画出这个类图,那根据我们这个外观模式呢,待会我们要做的是这样一个事情,就是这些。
01:06
大家可以看到,这些是我们的设备。各种各样的设备,那待会儿呢,我们写一个home home影院的一个外观模式。那么这个外观外观模式内呢?在这里我们就会写他的ready准备。Though I'pray。播放,Pass,暂停,End结束。OK,那这个外观类呢,在这里最后客户端在调的时候,Connect调的时候指认他就可以了。创建一个外观内的实例,调用它相关的方法完成这一系列操作,OK,好,同学们,嗯,这个是一呃内图呢,因为比较简单,我这直接就画了,现在我们走一下代码打开,这里我们来一起写代码了。呃,代码呢也比较简单,给大家做一个演示哈,首先呢,我们先把这些类都创建起来,比如说第一个DVD player。
02:00
OK,这里面呢,有哪些方法,我们来试一下。它就是一个类,那这里面我们做一个单利模式使用。单利模式。大家应该还记得单例模式是怎么写的哈,现在假如我们就用这个简就简单一点,使用什么呢?使用二汉式。二汉式来,我们写一下private private static什么呢?DV DVD player。DVD player OK,直接返回一个instance instance等于六一个。DVD player。是吧,外观模式嘛,然后这边我们提供一个方法,Public干什么呢?Static。13题,呃,返回一个DVD。DVD player的实例,Get instance对不对?好,这边直接就返回了,因为我用的是二汉式,比较简单,就instance返回就可以了。
03:03
OK,那对于这个DVD而言,它有什么样的一些功能呢?我们来快速的写一写,比如说它有一个打开的功能,我们提示一句话。提示一句话,这叫什么呢?DVDDVD啊,打开了。好吧,DVD打开,那显然DVD应该还有什么方法呢?Off关闭的方法,这些方法都很简单,来走一个,这边写一个d DVD off关闭,那DVD还有什么功能呢?各位同学,DVD肯定有一个最重要的功能就是播放。是不是player?播放,所以说我这写一句话叫什么呢,DVD开始播放。System。写句话叫做DVD is,什么play?正在播放中。好了,有了这些方法过后呢,我们想一想,是不是还有其他方法,同学们可以自己去啊,写一写就我就四个亿嘛,比如说你可能还有暂停,还有什么什么方法,对吧,比如说我们再加一个方法吧,暂停了PA。
04:09
PAU。Part,那么这里呢,我们比如说你在播放过程中,你希望暂停一下,有DVD什么呢?DVD这个暂停了。其他方法我就不写了,好吧,DVD上就写完了,我们再写什么呢?下个下一个我们再写一个什么类呢?同学们,咱们写这一个爆米花。Pop。Corn。Popcorn。OK,这个是用来干什么呢?是用来这个做爆米花的。爆米花机好,其实也是大同小异,主要是为了把这个效果给它演示出来,呃,这大致的方法都很像是吧,我们也用一个二汉式。那这边呢,我们换成popor,这边换成pop car就行了。
05:00
好,紧接着我们仍然是写一个方法,让他可以返回什么呢?可以返回这个实例就可以了,Public。Public,然后static。返回。这个爆米花机,然后我们写get in式吞噬。对不对,然后返回return return什么呢。那爆米花有哪些功能呢?爆米花机有哪些功能?我们简单写几个就行了,比如说爆米花机呢,它也可以打开开始。就是开始去给我们制作爆米花。说写一句话叫做爆。Bomb,然后cor。是干什么啊,对不对,好,它也可以关闭。就是关完了,比如说我们已经把爆米花做好了,我们就把这个爆米花机关了就行了。就可以了,然后爆米花还可以可以出爆米花,所以说我们写一个叫做pop。爆米花干什么呢?出意思,比如说正在干什么呀,正在泡。
06:03
正在出爆米花,就写完了爆米花机,那么就写完了,我们紧接着再来写一个类。我们还有什么类呢?快速的写一下,比如说下面我们来写一个投影仪是吧,你肯定还有投影仪嘛,Project。Project就是投影仪,投影仪这个类呢,跟前面也是非常相似的,也做一个二汉式,诶不写这个也做一个二汉式,方式都非常相似,好,我这里可以复制一份。比较快捷,那首先呢,我们也用二汉市来给返回一个projector的实例。一样的对不对,那么代码就写完这边改成我们的project,那同样这边呢,我们改成。这个投影仪打开了,投影仪关闭了,投这段没有投影仪这个泡泡了,那投影仪还有什么功能呢?我们想想投影仪是不是,呃,我们这按照这个分析,应该还有一个聚焦的功能,改改成FOX。
07:03
Focus。对不对,把它改成project is正在聚焦。对吧,那当然还有一些其他方法,我们就不一个个的写了好吗?诶这个地方是focus。这边就写fo好吧,举个意一个意识到了就行了,好,紧接着我们再来写一个。我们还有什么设备呢?各位同学,下一个呢,我们写它的屏幕screen。Screen。OK。那我们依然是按照这个套路出牌就行了,首先呢,它也有这种类似的一些方法,对吧,我们根据实际情况做一个调整来走一个,首先呢,它也是用二汉式返回一个instance。没问题,那我们这个屏幕屏幕显然我们就不能说是on和off了,我们是up,比如说把这个屏幕往上升。
08:00
往上升,这边又改成script。Up。没问题吧,那么square有up肯定就有下降动。把这个屏幕下降,写个down就完事了。好的,这就是我们的屏幕也写完了,我们再接着写,下一个叫做什么呢?下一个我们是不是还有一个立体声没有写。立体声相关的方法来写一个立体声走。立体声内。十个亿啊呃,SST。Reo,哦,TE,然后呢,这边我们来写相应的方法。同样,我们也用二汉四来完成设点事,把它粘过来。是吧?它粘过来好,首先呢,我们也用二汉式来回一个实例就没什么,呃,然后立体声有什么功能呢?肯定它有打开,打开我们这个立体声。是不是?这个音响效果要好吗?同样我们也有关闭这个立体声of。
09:05
好的,那这边写个哦,那地几声还有什么呢,可能把这个声音调大或者是。呃,调大或者是调小,是不是比较调大呢,我们就up。这个声音调大一点。对不对,立体声调大了,音量调大等等,我们就不写那么多了,大家知道这个概念就OK,好,不写了。啊,立体声啊,不是屏幕好,这个又写了一个设备,我们再写最后一个设备。最后一个设备,那最后一个设备是什么呢?OK,就是我们的这个影院的一个灯光,影院的一个灯光写下。里面灯光。那这个单词啊,别写错了,呃,想想是这个写怎么写的T吧,Light I影院的灯光是这样写的吧。E好像EA没有这个。没有这个H吧,是要写he。
10:02
没问题,影院的灯光好,那同样我们也用这种恶汉式的方式来玩一把。好的。这是不是?没,没有整错啊,里面灯光打开,同样返回的对象实例呢,我们也用二汉式。对吧,这个是很简单的,然后呢,打开我们说灯光打开了,灯光关闭了。好,OK,灯光调的更亮一点,比如bright明亮team就是调暗嘛,调暗然后呢,灯灯光还可以调的再亮一点,Bright。写一个我四个亿,好同学们,Right,呃,就是bright bright bright。OK。好,同学们现在经过一番倒腾呢,我们这个就写完了,显然诶这方有问题。哦,这边没有改。显然这个时候如果我们不用,如果我们不用外观模式,那我们现在就可以写一个client了,就是用一个客户端来调用它。
11:04
同学们可以想象到。我们这个流程,我们这个流程,如果这里这里直接调用。怎么样调用我们这一个各个设备的方法,那就很麻烦了,直接调用很麻烦。很麻烦,而且呢。麻烦。那么而且不方便,就是你现在扩展呢,也不太方便,所以说现在我们要中间做一个什么呀,做一个就是外观内,那这个外观内根据根据刚才我们画这个图来讲呢,就是这样子的写一个home。Home的这个影院的,呃。这个它的一个外观啊,好,现在我们把这个写一下,就是home。Home,然后呢,写上它的这个类啊叫。影院。的外观。
12:01
别写错了这单词啊,Sir,呃,这个叫做。叫叫做外观就可以了,这样子。好,那这里面呢,我们这个方法怎么去写呢,写上一个主方法。写上一个主方法来调用。好,现在我们这个home the fora呢,这个影院的外观咱们就有了,那在这个center fora这个影院里面,我们会怎么去处理呢?大家想一想,你显然你显然要把它分解成几个方法,你不要。统一在这里掉,肯定不能在这统一掉了,你统一调的话很麻烦,对不对,所以说我们首先呢这样做,同学们首先我们先创建,我们先定义,定义各个子系统的对象。是不是在这个home search for这个类里面,我们都要用子系统的各个对象,那非常简单,那么写一个,那该有的东西咱们都都得有。
13:01
Theater light。灯光对不对,灯光我们。来整一个,写个T。没问题吧?然后紧接着我们还有什么东西呢?Private,还有就是我们的爆米花机泡。Corn。对不对,好,那这边呢,我们也做成一个小写的就可以,没问题,紧接着继续来写,还有什么呢?我们统一管理对吧,用这个外观的统一,还有我们的立体声。立体声呢,我们同样给它做成一个属性。紧接着我们再来写,还有什么呀,还有我们的这一个投影仪,Project。投影仪,好的。投影仪呢,我们也写到这里来,还有什么设备,我们还有一个设备,就是我们的屏幕是不是screen。OK。好,我们还有什么设备呢?还有最后一个设备就是我们的DVD播放。简写。
14:00
DVD,小小写的DVD就可以,那这些在哪里给它初始化比较合理呢?显然我们在构造器里面去初始化是最合理的是吧?把这些全部一次性的传入完事了,这个就是构造器。构造起。啊,Go,早起,那大家想一想,你在这做这个工作的话,这些地方再传就没有意义了,就说整个这个参数这样传递呢,不好,因为我们是二汉式,所以说在这呢,我们可以用我们相应的方法来获取,比如说这个影院。我们要获取的话呢,直接这点get一个instance,当然这个方法也可以直接写到上面去,好,然后这边是pop。泡泡呢,也获取到一个实例,同样我们的立体声也获取到一个实例,因为我用的是二汉斯,所以直接就可以拿过来了,Project。点得到它的实力,Script屏幕得到它的一个实例,然后DVD得到一个实例。
15:01
对,根据我们这个代码的分析,我们希望能够把这个操作,把这个操作分成什么呢?我们把它分成四步。四步分成四步骤啊,四个步骤,第一个步骤就是我们public什么呀,Ready准备工作,Re re ready,那准备工作根据前面的这一个流程分析,我们大体就可以来自己组织了,比如说我们这样准备的,先把这个爆米花机。诶,爆米花机打开。哦,准备为我们做爆米花,然后呢,再让这个爆米花机开始工作。诶,他就开始给我们出爆米花了,然后呢,屏幕我们把这个屏幕screen。刚才分析了screen屏幕应该放下来,诶当把屏幕放下来,把屏幕放下来过后呢,把把我们这个投影仪打开,是不是这个流程呢?投影仪怎么样啊,打开了,投影仪打开以后下一步该干什么呢?好的立体声我们把立体声打开。
16:11
立体声打开了,嗯,按一下啊,这边应该有诶立体声打开这个,嗯,难道没有写吗?Screen。啊,立体声打开,我没有写。立体声在哪儿?盎游啊。立体声打开应该是有的on。学校点on。诶,这个有点怪啊。俺没有。看看啊。Screen这个类我们点进去。点进去哦,这没有确实没有加一个。加一个on。诶,这不对,我这调的有问题啊,这不是这个调调错了,是立体声,咱们把这个写错了,立体声啊,打都是打A是打头的,所以这没看清楚啊,打开了,好,这是我们把立体声打开,立体声打开以后,我们下一步该干什么事情呢?好,我们把我们的DVD给打开。
17:08
是不是DVD我们也打开了DVD打开DVD。打开了以后,下一步呢,我们就可以把这个灯,把我们这个影院,整个影院的这个灯光呢,干什么调暗一点,荡一下。条案条案,这就利于我们去观看了,这是我们的准备工作,那下面呢,就应该是我们的下一个流程,比如说下一个流程我们要干什么呢?我们要开始播放,准备好了就可以播放。同学们想一想,播放这个动作其实只需要我们DVD来完成就可以了,因为只有他有play方法。好,既然有了播放,我们中间是不是有可能要暂停,我我写个pau,因为根据前面的分析,我们这边也有也有这个暂停是吧,我们有暂停的操作,那暂停呢,我们就调用谁啊调用DVD来暂停就行了。
18:03
好的,这个就行了,最后是不是电影看完了以后呢,我们需要end结束好,结束的过程跟前面的方式是很相似的,就把这个打开,一个一个的处理就完事了,来,我们调一调。你看如果我们不像这样分布来选择的话,你这个一系列的这样操作很麻烦很麻烦,所以说我们分开来写的功能,对外只提供四个方法就完事了,好我们来处理一下,首先怎么操作呢?把这个爆米花机怎么样,第二把爆米花机我们关掉。是不是然后把这个影院,把这个电影院呢,调亮一点,因为我准备不看了嘛,把这个灯光打开,把这个灯光打开以后呢,把屏幕。啊,把屏幕这个升起来,因为你视频是降下来,我先把它升起来了,升起来,升起来以后投影仪咱们也关掉了,是不是一步步的做投影仪关掉以后呢,把我们这个立体声怎么样也关掉off掉。
19:05
对不对,Play,因为你这个DVD你DVD你DVD原先还是暂停或者播放的,或者暂停的我都不管,最后把这个DVD关掉就行了,Off off。完事了,好,同学们你看这个流程就比较清晰,那我在调用的时候怎么调呢?同学们可以看到调用的时候就不像原先那种思路啊,还得还得怎么样,还得一个去做,我现在呢。调用方不在这,我们干脆把调用方写到另外一个地方去好吧。这这就是我们一个影院调用方呢,我写个C的调用。诶,这样就更清晰了。CT走吧组,诶这面是不是有个了。诶,这有个可兰,这个可兰在这。好,那就在这儿,我们直接写一个六,一个home。又一个home。Theater这个分,呃,这个外观,那外观类。
20:04
好,拿到这个home c for过后呢,我们就可以去有选择的调用它的这个方法,因为你是一个外观类嘛,所以说比如说我现在就一个很简单的做,我要干什么呢,Ready。OK,然后呢,怎么样,然后我准备好了锅,我就播放完事了。好,同学们看我们运行一下。运行起来,运行起来这个流程我们可以看到非常的清晰,你看对吧。爆米花机打开爆爆米花机出出爆米花屏幕降下来,投影仪打开,立体声打开,DVD打开,把灯光调暗,开始播放,对,那你如果想关闭了,说诶现在我我现在不想不想看,对吧,我可以去调一个end,当然如果是在这个过程中,你会发现诶也有可能要暂停,那你就就就到这个暂停就行了,来再运行一下。
21:00
你看这个流程很清晰,所以说在这地方我们不想看到我们关闭已关闭,关闭对吧,Off off OK这样一个操作,所以说通过这个案例我们可以体会到什么呢?这个让我们这个爆米花,呃,让这一个外观内就是home start for来调用我们子系统会比较方便,而且我们如果子系统之间有相关的调用呢,我们也可以去让他自己自行完成。自行完成好,同学们那关于外语使用外观模式来解决这个家庭影院的一个演示呢,我们就到这里。
我来说两句