设计模式--状态(State)模式
模式定义
允许一个对象在其内部状态改变时改变它的行为,从而使对象看起来似乎修改了其行为
类图
要点总结
- 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)模式相关推荐
- 设计模式:状态(State)模式
设计模式之状态(State)模式 在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态.当有状态 ...
- 设计模式学习笔记——状态(State)模式框架
设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...
- [设计模式]State模式
<Java与模式> 又称状态对象模式.状态模式是对象的行为模式.GOF95 一个对象的行为取决于一个或者多个动态变化的属性,这样的属性叫做状态.这样的对象叫做有状态的对象(stateful ...
- 状态(State)模式
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的 ...
- C++之状态(State)模式
0. 简介 状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样.这其实就有点类似算法中的有限状态机的形式. 其主要思想是程序在任意时刻仅可 ...
- 设计模式之 State(状态模式)通俗理解
23种设计模式 1 State 模式的定义 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 2 何时使用? 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了它的类.状态模式 ...
- Java设计模式——状态模式【State Pattern】
一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...
- 趣谈设计模式 | 状态模式(State):如何实现游戏中的状态切换?
文章目录 案例:马里奥积分竞赛 有限状态机 分支逻辑法 查表法 状态模式 状态模式与策略模式 总结 完整代码与文档 案例:马里奥积分竞赛 喜欢马里奥的小伙伴们都应该知道,前不久马里奥为了庆祝35周年, ...
- 5.8 设计模式之State(状态)—对象行为型模式
5.8 State(状态)-对象行为型模式 参考文章 意图 状态模式是一种行为设计模式, 改变一个对象的内部状态进而改变其行为. 问题及情景 状态模式与有限状态机的概念紧密相关. 其主要思想是程序在任 ...
最新文章
- pytorch 初始化权重
- nagios监控windows USBKEY
- ReentrantLock与公平锁、非公平锁实现
- jmeter java接口_JMeter接口Java开发五步曲
- java程序设计_十分钟说课—Java程序设计(耿祥义)
- r语言clind函数_R 语言学习笔记 1
- linux下串口抓包,Linux的串行端口 - wrtie()字节到目标设备通过串口
- 敏感性分析算法 程序_计算机程序设计艺术(TAOCP)精读笔记1 - 算法分析真正应该有的样子 Part 1...
- HALCON-FUZZY检测用于开关引脚测量
- 利用Python代码完成Fisher判别的推导
- 关于VMWare版本下载选择
- 《深入浅出WPF》学习笔记
- 从零开始学PCR技术(一):PCR技术简介
- 重新认识caniuse
- 实际成本法 与 计划成本法 用的到科目
- SafeIterableMap
- CButton类的继承+重写--本类来自孙鑫老师C++课堂
- 《黄花黄》曈曈诗作品摘录
- Ubuntu 16.04 如何进入系统文件/etc/profile修改内容
- 简单了解条形码,二维码的生成
热门文章
- linux配置接口多地址,Linux /etc/network/interfaces配置接口方法
- linux 本地做yum源,linux——制作本地yum源
- access2003安装包百度云_《逗比羊电影》_逗比羊电影最新版下载
- 夏季机房空调预警,出现故障了怎么办?
- 无人数据中心何时到来仍需等待
- 机房承重标准及承重计算方法
- Py之Seaborn:数据可视化Seaborn库的柱状图、箱线图(置信区间图)、散点图/折线图、核密度图/等高线图、盒形图/小提琴图/LV多框图的组合图/矩阵图实现
- 成功解决pywintypes.error: (2, 'LoadLibraryEx', '系统找不到指定的文件。')
- Android 图片黑白显示 自定义饱和度
- 【TensorFlow】TF-tf.nn.dropout