美文网首页
设计模式——状态模式

设计模式——状态模式

作者: DevilRoshan | 来源:发表于2020-11-02 00:41 被阅读0次

什么是状态模式?

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

实现

type State interface {
    On(machine *Machine)
    Off(machine *Machine)
}

type Machine struct {
    current State
}

func NewMachine() *Machine {
    return &Machine{current:NewOff()}
}

func (this *Machine)SetCurrent(state State) {
    this.current = state
}

func (this *Machine)On(){
    this.current.On(this)
}

func (this *Machine)Off(){
    this.current.Off(this)
}

type On struct {
}

func NewOn() State {
    return &On{}
}

func (this *On)On(machine *Machine){
    fmt.Println("设备已经开启")
}

func (this *On)Off(machine *Machine){
    fmt.Println("从On到Off状态,关闭")
    machine.SetCurrent(NewOff())
}

type Off struct {
}

func NewOff() State {
    return &Off{}
}

func (this *Off)On(machine *Machine){
    fmt.Println("从Off状态开启至On状态")
    machine.SetCurrent(NewOn())
}

func (this *Off)Off(machine *Machine){
    fmt.Println("设备已经关闭")
}
func TestState(t *testing.T) {
    machine := NewMachine()
    machine.Off()
    machine.On()
    machine.On()
    machine.On()
    machine.Off()
    machine.Off()
    machine.On()
}
// === RUN   TestState
// 设备已经关闭
// 从Off状态开启至On状态
// 设备已经开启
// 设备已经开启
// 从On到Off状态,关闭
// 设备已经关闭
// 从Off状态开启至On状态
// --- PASS: TestState (0.00s)
// PASS

优点

  • 结构清晰,避免了过多的switch…case或if…else语句的使用;
  • 很好的体现了开闭原则和单一职责原则,想要增加状态就增加子类,想要修改状态就修改子类即可;
  • 封装性非常好,状态变化放置到了类的内部来实现,外部调用不需要知道类内部如何实现状态和行为的变换。

缺点

  • 子类会太多,也即类膨胀。

使用场景

  • 行为随状态改变而改变的场景;
  • 条件、分支判断语句的替代者。

注意

  • 在行为受状态约束的情况下可以使用状态模式,使用时对象的状态最好不要超过5个。

相关文章

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • 设计模式——状态模式

    设计模式——状态模式 在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 优点: 减少...

  • 设计模式-状态设计模式

    1.定义 对于某个操作,由于其状态的不同,表现出的行为会不同(如遥控器进行音量增加的操作,在电视是开机状态下是可以...

  • 设计模式——状态模式

    前言 设计模式是指导一个程序猿以更好的姿态处理一些问题,而不再像刚学编程的我们,只会使用if-else分支语句,或...

  • 设计模式--状态模式

    基本常识:策略模式与状态模式是双胞胎,在出生时才分开。 假设公司有个糖果机,1当糖果机由糖果,投入25分钱,转动曲...

  • 设计模式——状态模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Patte...

  • 设计模式《状态模式》

    引言   上一节我们说了策略模式。这一节我们讲讲策略模式的双胞胎弟弟:状态模式,这个模式大家可能不常见,也不常用,...

  • 设计模式——状态模式

    定义 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行...

  • 设计模式 - 状态模式

    模式定义 允许一个对象在其内部状态发生改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式(State Pa...

  • 设计模式 ——— 状态模式

    STATE(状态) ———— 对象行为型模式 意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改...

网友评论

      本文标题:设计模式——状态模式

      本文链接:https://www.haomeiwen.com/subject/yavsvktx.html