目录

一、练习题

二、小结


一、练习题

1. 请用状态模式模拟串联电路的两个小灯泡的亮与灭(注意:两个小灯泡应该同时亮或者同时灭)。

类图

核心代码

package DesignPattern.state

// 抽象状态类
public abstract class BulbState {
    public func on(bulb: Bulb): Unit
    public func off(bulb: Bulb): Unit
}

// 打开状态
public class OnState <: BulbState {
    public override func on(bulb: Bulb) {
        println("${bulb.name}已经打开!")
    }

    public override func off(bulb: Bulb) {
        println("${bulb.name}关闭")
        bulb.setState(Bulb.getState("off"))
    }
}

// 关闭状态
public class OffState <: BulbState {
    public override func on(bulb: Bulb) {
        println("${bulb.name}打开!")
        bulb.setState(Bulb.getState("on"))
    }

    public override func off(bulb: Bulb) {
        println("${bulb.name}已经关闭")
    }
}

// 环境类
public class Bulb {
    public var name: String = ""
    private static var currentState: BulbState
    private static var onState: BulbState
    private static var offState: BulbState

    static init() {
        onState = OnState()
        offState = OffState()
        currentState = onState
    }

    func setState(state: BulbState) {
        currentState = state
    }

    static func getState(state: String): BulbState {
        if (state == "on") {
            return onState
        } else {
            return offState
        }
    } 

    public func on() {
        currentState.on(this)
    }

    public func off() {
        currentState.off(this)
    }
}

测试代码

package DesignPattern
import DesignPattern.state.*

main(): Int64 {
    let bulb1 = Bulb()
    bulb1.name = "小灯泡1"
    let bulb2 = Bulb()
    bulb2.name = "小灯泡2"

    bulb1.on()
    bulb2.on()
    bulb1.off()
    bulb2.off()
    bulb2.on()
    bulb1.on()

    return 0
}

二、小结

本章为大家详细的介绍了仓颉设计模式中状态模式练习题的内容,下一章,为大家带来策略模式的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐