模式定义

允许一个对象在其内部状态改变时改变它的行为,从而使对象看起来似乎修改了其行为

类图

要点总结

  • State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象,但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦
  • 为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况,因为转化是原子性的–即要么彻底转化过来,要么不转换
  • 如果State对象没有实例变量,那么各个上下文可以共享一个State对象,从而节省对象开销

Go语言代码实现

工程目录

State.go

package Stateimport "fmt"type State interface {On(m *Machine)Off(m *Machine)
}type Machine struct {current State
}func NewMachine() *Machine{return &Machine{NewOff()}
}func (m *Machine) setCurrent(s State) {m.current = s
}func (m * Machine) On() {m.current.On(m)
}func (m * Machine) Off() {m.current.Off(m)
}type ON struct {}func NewON() State{return &ON{}
}
func (o *ON) On(m *Machine) {fmt.Println("设备已经开启...")
}func (o * ON) Off(m * Machine) {fmt.Println("从On的状态到Off")m.setCurrent(NewOff())
}type OFF struct {}func NewOff() State{return &OFF{}
}func (o *OFF) On (m *Machine) {fmt.Println("从Off状态到On")m.setCurrent(NewON())
}func (o * OFF) Off(m * Machine) {fmt.Println("已经关闭")
}

State_test.go

package Stateimport "testing"func TestState(t *testing.T) {machine := NewMachine()machine.Off()machine.On()machine.On()machine.Off()
}

设计模式--状态(State)模式相关推荐

  1. 设计模式:状态(State)模式

    设计模式之状态(State)模式 在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态.当有状态 ...

  2. 设计模式学习笔记——状态(State)模式框架

    设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...

  3. [设计模式]State模式

    <Java与模式> 又称状态对象模式.状态模式是对象的行为模式.GOF95 一个对象的行为取决于一个或者多个动态变化的属性,这样的属性叫做状态.这样的对象叫做有状态的对象(stateful ...

  4. 状态(State)模式

    状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的 ...

  5. C++之状态(State)模式

    0. 简介 状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样.这其实就有点类似算法中的有限状态机的形式. 其主要思想是程序在任意时刻仅可 ...

  6. 设计模式之 State(状态模式)通俗理解

    23种设计模式 1 State 模式的定义 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 2 何时使用? 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了它的类.状态模式 ...

  7. Java设计模式——状态模式【State Pattern】

    一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  8. 趣谈设计模式 | 状态模式(State):如何实现游戏中的状态切换?

    文章目录 案例:马里奥积分竞赛 有限状态机 分支逻辑法 查表法 状态模式 状态模式与策略模式 总结 完整代码与文档 案例:马里奥积分竞赛 喜欢马里奥的小伙伴们都应该知道,前不久马里奥为了庆祝35周年, ...

  9. 5.8 设计模式之State(状态)—对象行为型模式

    5.8 State(状态)-对象行为型模式 参考文章 意图 状态模式是一种行为设计模式, 改变一个对象的内部状态进而改变其行为. 问题及情景 状态模式与有限状态机的概念紧密相关. 其主要思想是程序在任 ...

最新文章

  1. pytorch 初始化权重
  2. nagios监控windows USBKEY
  3. ReentrantLock与公平锁、非公平锁实现
  4. jmeter java接口_JMeter接口Java开发五步曲
  5. java程序设计_十分钟说课—Java程序设计(耿祥义)
  6. r语言clind函数_R 语言学习笔记 1
  7. linux下串口抓包,Linux的串行端口 - wrtie()字节到目标设备通过串口
  8. 敏感性分析算法 程序_计算机程序设计艺术(TAOCP)精读笔记1 - 算法分析真正应该有的样子 Part 1...
  9. HALCON-FUZZY检测用于开关引脚测量
  10. 利用Python代码完成Fisher判别的推导
  11. 关于VMWare版本下载选择
  12. 《深入浅出WPF》学习笔记
  13. 从零开始学PCR技术(一):PCR技术简介
  14. 重新认识caniuse
  15. 实际成本法 与 计划成本法 用的到科目
  16. SafeIterableMap
  17. CButton类的继承+重写--本类来自孙鑫老师C++课堂
  18. 《黄花黄》曈曈诗作品摘录
  19. Ubuntu 16.04 如何进入系统文件/etc/profile修改内容
  20. 简单了解条形码,二维码的生成

热门文章

  1. linux配置接口多地址,Linux /etc/network/interfaces配置接口方法
  2. linux 本地做yum源,linux——制作本地yum源
  3. access2003安装包百度云_《逗比羊电影》_逗比羊电影最新版下载
  4. 夏季机房空调预警,出现故障了怎么办?
  5. 无人数据中心何时到来仍需等待
  6. 机房承重标准及承重计算方法
  7. Py之Seaborn:数据可视化Seaborn库的柱状图、箱线图(置信区间图)、散点图/折线图、核密度图/等高线图、盒形图/小提琴图/LV多框图的组合图/矩阵图实现
  8. 成功解决pywintypes.error: (2, 'LoadLibraryEx', '系统找不到指定的文件。')
  9. Android 图片黑白显示 自定义饱和度
  10. 【TensorFlow】TF-tf.nn.dropout