前面 介绍了 设计模式中的组合模式,今天我们来认识一下外观模式
还是 先 提出一个 需求引出外观模式(比较与传统的方法)
一.需求:
组建一个家庭影院:
DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的
功能,其过程为:
• 直接用遥控器:统筹各设备开关
• 开爆米花机
• 放下屏幕
• 开投影仪
• 开音响
• 开DVD,选dvd
• 去拿爆米花
• 调暗灯光
• 播放
• 观影结束后,关闭各种设备
传统的方式:UML类图
先来看看 这种方式 的 优缺点
1)
在
ClientTest
的
main
方法中,创建各个子系统的对象,并直接去调用子系统
(
对象
) 相关方法,会造成调用过程混乱,没有清晰的过程
2) 不利于在ClientTest
中,去维护对子系统的操作
3)
解决思路:定义一个高层接口,给子系统中的一组接口提供一个
一致的界面
(
比
如在高层接口提供四个方法
ready, play, pause, end )
,用来访问子系统中的 一群接口
4)
也就是说
就是通过定义
一个一致的接口(界面类),用以屏蔽内部子系统的细节, 使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
=>
外观 模式
二.外观模式介绍
1)
外观模式(
Facade
),也叫“过程模式:外观模式为子系统中的一组接口提供 一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加 容易使用
2)
外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节【
类似于linux的系统调用,屏蔽底层细节,无需关心操作系统与底层硬件的交互细节,减轻编程的难度
】,使得调用端 只需跟这个接口发生调用,而无需关心这个子系统的内部细节。
外观模式UML原理图:
原理类图的说明(外观模式的角色)
1) 外观类(Facade): 为调用端提供统一的调用接口, 外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象
2) 调用者(Client): 外观接口的调用者
3) 子系统的集合:指模块或者子系统,处理Facade 对象指派的任务,他是功能的实际提供者
外观模式解决上面这个案例
1)可以理解为转换一群接口,客户只 要调用一个接口,而不用调用多个接口才能 达到目的。比如:在pc
上安装软件的时候经 常有一键安装选项(省去选择安装目录、安 装的组件等等),还有就是手机的重启功能 (把关机和启动合为一个操作)。
2)
外观模式就是解决多个复杂接口带来的使用
困难,起到简化用户操作的作用
3) UML图