swift设计模式学习二

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

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

代理模式的简单定义

import Foundation

class Subject : NSObject {
    func request() {
        
    }
}
import Foundation

class RealSubject: Subject {
    override func request() {
        //具体实现
    }
}
import Foundation

class 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 Foundation

class VirtualGamePlayer: NSObject {

    func login(User:String, Password:String) {
    
    }
    func killBoss() {
    
    }
    func upgrade() {
        
    }
}
import Foundation

class 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 Foundation

class 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()

强制代理模式 明天再整理



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值