外观模式-定义
另外一种称呼:门面模式
第一点:要求一个子系统的外部和其内部的通信必需通过一个统一的对象进行。
第二点:外观模式提供了一个高层次接口,使得子系统更易于使用
外观模式-场景
场景一:为复杂系统提供一个简单接口
场景二:当我们在构建一个层次结构的子系统时,使用Facade模式定义子系统中每一层入口点。如果子系统之间相互依赖,可以通过此模式简化它们之间的依赖关系。
外观模式-角色划分
两个核心角色
角色一:系统对外统一接口
角色二:子系统接口
外观模式-原理案例
电脑:拍照(摄像头)、打电话、上网(网卡)、听音乐…
每一个功能模块都是一个高层次接口
/// 门面模式 角色一: 系统对外统一接口
class Computer: NSObject {
// 角色一 持有角色二 的对象
private var camera:CamerProtocol
private var soundDisplayer:SoundProtocol
init(camera:CamerProtocol,soundDisplayer:SoundProtocol) {
self.camera = camera
self.soundDisplayer = soundDisplayer
}
func playSound() {
self.soundDisplayer.open()
self.soundDisplayer.PlaySound()
self.soundDisplayer.close()
}
func takePicture() {
self.camera.open()
self.camera.takePhone()
self.camera.close()
}
}
/// 门面模式 角色二: 子系统接口
protocol CamerProtocol {
func open()
func takePhone()
func close()
}
/// 门面模式 角色二的 接口实现
class Camera: CamerProtocol {
func open() {
print("相机----开机")
}
func takePhone() {
print("相机----照相")
}
func close() {
print("相机----关机")
}
}
/// 门面模式 角色二: 子系统接口 声音播放系统
protocol SoundProtocol {
func open()
func PlaySound()
func close()
}
/// 门面模式 实际上也就是外观模式 角色二的实现
class SoundCard: SoundProtocol {
func open(){
print("声音----开---")
}
func PlaySound(){
print("播放声音--- ")
}
func close(){
print("声音---- 关----")
}
}
UML图

网友评论