加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift设计模式之状态模式

发布时间:2020-12-14 07:00:10 所属栏目:百科 来源:网络整理
导读:转自 Swift设计模式 原文 Design-Patterns-In-Swift // 状态模式 // 百度百科:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类 // 设计模式分类:行为型模式 /// 持有状态的对象 class Context { private var state: State = Unau

转自

  • Swift设计模式

原文

  • Design-Patterns-In-Swift
// 状态模式
// 百度百科:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
// 设计模式分类:行为型模式

/// 持有状态的对象
class Context {
    private var state: State = UnauthorizedState()

    var isAuthorized: Bool {
        get { return state.isAuthorized(self) }
    }

    var userId: String? {
        get { return state.userId(self) }
    }

    func changeStateToAuthorized(userId userId: String) {
        state = AuthorizedState(userId: userId)
    }

    func changeStateToUnauthorized() {
        state = UnauthorizedState()
    }

}

/** * 状态接口 */
protocol State {
    func isAuthorized(context: Context) -> Bool
    func userId(context: Context) -> String?
}

/// 未认证状态
class UnauthorizedState: State {
    func isAuthorized(context: Context) -> Bool { return false }

    func userId(context: Context) -> String? { return nil }
}

/// 认证状态
class AuthorizedState: State {
    let userId: String

    init(userId: String) { self.userId = userId }

    func isAuthorized(context: Context) -> Bool { return true }

    func userId(context: Context) -> String? { return userId }
}

let context = Context()
(context.isAuthorized,context.userId)
context.changeStateToAuthorized(userId: "admin")
(context.isAuthorized,context.userId) // now logged in as "admin"
context.changeStateToUnauthorized()
(context.isAuthorized,context.userId)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读