今天看啥  ›  专栏  ›  Fade_VV

ios-外观模式

Fade_VV  · 掘金  ·  · 2021-04-18 21:55
阅读 47

ios-外观模式

  • 加入我们做一个功能的时候那个可以分成多个步骤,步骤一、步骤二、步骤三...,分别处理对象1、对象2、对象3...,
    • 方法1(处理对象1)
    • 方法2(处理对象2)
    • 方法3 (处理对象3)
  • 这样的话这个类还有其他功能,这样这个类虽然把方法分开了看的比较清晰但是代码量还是很多的。
  • 我们可以创建3个类,分别在三个不同类中掉方法
    • 对象1调用对象方法1
    • 对象2调用对象方法2
    • 对象3调用对象方法3
  • 这样就简化了
  • 但是这样每次都要写三次还是比较麻烦,假如多次使用,还是有点麻烦的
  • 我们可不可以一个类调用三个类的方法呢,或者一个类调用对象1方法1一次,对象2方法2两次呢
  • 一个手机对外的统一接口
import Foundation

// 角色一: 系统对外统一接口
class Phone {
    
    var photo: PhotoProtocol
    var call: CallProtocol
    var music: MusicProtocol
    
    init() {
        self.photo = Photo()
        self.call = Call()
        self.music = Music()
    }
    
    func takePhoto() {
        self.photo.takePhoto()
    }
    
    func takeCall() {
        self.call.call()
    }
    
    func playMusic() {
        self.music.playMusic() 
    }
    
    
}
复制代码
  • 拍照功能的代理
import Foundation

// 角色二: 子系统接口
protocol PhotoProtocol {
    
    func takePhoto()
    
}
复制代码
  • 拍照功能
import Foundation

class Photo: PhotoProtocol {
    func takePhoto() {
        print("拍照中...")
    }
}

复制代码
  • 打电话代理
import Foundation

// 角色二: 子系统接口
protocol CallProtocol {
    
    func call()
}
复制代码
  • 打电话功能
import Foundation

class Call: CallProtocol {
    func call() {
        print("正在打电话...")
    }
}
复制代码
  • 播放音乐代理
import Foundation

// 角色二: 子系统接口
protocol MusicProtocol {
    func playMusic()
}
复制代码
  • 播放音乐功能
import Foundation

class Music: MusicProtocol {
    func playMusic() {
        print("音乐播放中...")
    }
}
复制代码
  • 这三个就是个协议,面向协议编程
  • 参考这个

image.png

  • 调用
let phone = Phone()

phone.playMusic()
phone.takePhoto()
phone.takePhoto()
phone.takeCall()

复制代码
  • 结果
音乐播放中...
拍照中...
拍照中...
正在打电话...
复制代码

参考资料文章




原文地址:访问原文地址
快照地址: 访问文章快照