swift设计模式学习二

来源:互联网 发布:网络诈骗如何举报网站 编辑:程序博客网 时间:2024/06/03 22:51

今天看的代理模式,这个模式使用率很高,它有两个主要特点,1.真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件事物。2.具体主题角色是随时都会发生变化的,只要它实现了接口,不管如何变化,都无法逃过接口掌控,我们的代理类完全可以不做任何修改的情况下使用

在IOS中,在使用tableview,scrollview等控件的时候,苹果要求实现其代理,就是使用的这个模式

代理模式的简单定义

import Foundationclass Subject : NSObject {    func request() {            }}import Foundationclass RealSubject: Subject {    override func request() {        //具体实现    }}import Foundationclass Proxy: Subject {    var subject: Subject?    init(Obj:Subject) {        self.subject = Obj    }    func before() {        //预处理    }    func after() {        //善后处理    }    override func request() {        self.before()        self.subject?.request()        self.after()    }}

代理模式有两个扩展,一普通代理,二强制代理

普通代理:(下面举个例子,它的要求就是客户端只能访问代理角色,而不能访问真实角色)

import Foundationclass VirtualGamePlayer: NSObject {    func login(User:String, Password:String) {        }    func killBoss() {        }    func upgrade() {            }}import Foundationclass GamePlayer: VirtualGamePlayer {    var name:String = ""    init(gameplayer:VirtualGamePlayer?,Name:String) {        super.init()        if gameplayer == nil {            print("真实角色为空")        }else {            self.name = Name        }    }    override func killBoss() {        print("\(self.name)+打怪!")    }    override func login(User: String, Password: String) {        print("\(User)+\(Password)")    }    override func upgrade() {        print("\(self.name)升级了")    }}import Foundationclass GamePlayerProxy: VirtualGamePlayer {    var gameplayer:VirtualGamePlayer?    init(gpName:String) {        super.init()        gameplayer = GamePlayer(gameplayer: self,Name: gpName)    }    override func killBoss() {        self.gameplayer?.killBoss()    }    override func login(User: String, Password: String) {        self.gameplayer?.login(User, Password: Password)    }    override func upgrade() {        self.gameplayer?.upgrade()    }}//main函数let gmProxy:GamePlayerProxy = GamePlayerProxy(gpName: "里斯")gmProxy.login("lisi", Password: "123")gmProxy.killBoss()gmProxy.upgrade()

强制代理模式 明天再整理



0 0