Swift 重学设计模式系列之状态模式

状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

状态模式是一种对象行为型模式,其主要优点如下。
    1    状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。
    2    减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。
    3    有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。

状态模式的主要缺点如下。
    1    状态模式的使用必然会增加系统的类与对象的个数。
    2    状态模式的结构与实现都较为复杂,如果使用不当会导致程序结构和代码的混乱。

class Gate {
    var context:Context
    init(context: Context) {
        self.context = context;
    }
    
    // 守门员
    func gateMan() {
        self.context.change()
    }
}

class Context {
    var state: State = CloseState()
    func change() {
        self.state.change(context: self);
    }
    func currentState() {
        self.state.info()
    }
}

protocol State {
    func info()
    func change(context:Context)
}

class OpenState: State {
    func change(context: Context) {
     context.state = CloseState()
    }
    
    func info() {
        print("大门打开")
    }
}

class CloseState: State {
    func change(context: Context) {
        context.state = OpenState()
    }
    
    func info() {
        print("大门关闭")
    }
}

let gate = Gate(context: Context())
gate.context.currentState()
gate.gateMan()
gate.context.currentState()

//大门关闭
//大门打开

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值