State Pattern

  状态模式把对象每一个状态的行为封装在对象内部。避免大量状态逻辑杂糅。

实现

package stateimport "fmt"type State interface{NextState()StateUpdate()
}type GameStartState struct{}type GameRunState struct{}type GameEndState struct{}func (this *GameStartState)NextState()State{fmt.Println("Start Next")return new(GameRunState)
}func (this *GameStartState) Update(){fmt.Println("Game Start")}func (this *GameRunState)NextState()State{fmt.Println("Run Next")return new(GameEndState)
}func (this *GameRunState) Update(){fmt.Println("Run")
}func (this *GameEndState)NextState()State{return new(GameStartState)
}func (this *GameEndState) Update(){fmt.Println("End")
}
package mainimport ("projects/DesignPatternsByGo/behavioralPatterns/state""time"
)func stateMechine(state state.State, ch chan int) {for {select {case i := <-ch:if i == 1 {state = state.NextState()} else if i == 0 {return}default:state.Update()}}
}func main() {st := new(state.GameStartState)ch := make(chan int)go stateMechine(st, ch)time.Sleep(time.Second * 3)ch <- 1time.Sleep(time.Second * 3)ch <- 1time.Sleep(time.Second * 3)ch <- 0time.Sleep(time.Second * 3)
}

【寒江雪】Go实现状态模式相关推荐

  1. JS设计模式(13)状态模式

    什么是状态模式? 定义:将事物内部的每个状态分别封装成类,内部状态改变会产生不同行为. 主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为. 何时使用:代码中包含大 ...

  2. 设计模式之状态模式(State)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. 设计模式:状态模式(State Pattern)

    作者:Wang Juqiang  创建于:2012-07-16 出处:http://www.cnblogs.com/wangjq/archive/2012/07/16/2593485.html 收录于 ...

  4. else 策略模式去掉if_设计模式(三)——简单的状态模式代替if-else

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长. 前言 大多数开发人员现在还在使用if else的过 ...

  5. 【设计模式】 模式PK:策略模式VS状态模式

    1.概述 行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下. 策略模式(左)和状态模式(右)的通用类图. 两个类图非常相似,都是通过Cont ...

  6. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  7. 18State(状态)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.状态变化模式 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?状态变化模式为这一问题提供 ...

  8. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  9. 状态模式(State)

    一.概念: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类.[DP] 二.作用: 状态模式的主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况. 吧状态的判断逻辑 ...

  10. HeadFirst设计模式篇十:状态模式

    2019独角兽企业重金招聘Python工程师标准>>> 问题引入: 糖果机有四个状态,在不同的动作下状态会发生转变.后续可能会添加其他状态,例如转动曲柄,有可能调出两颗弹. 设计方案 ...

最新文章

  1. Win64 驱动内核编程-18.SSDT
  2. Jekyll Bootstrap初始
  3. BeanDefinition的载入和解析
  4. 银行登录控件仿制--防钩子,防嗅探
  5. 多列集合的索引器实现
  6. python字典和集合双向索引_Python字典和集合
  7. 关于反射的我的一些看法
  8. bilibili 解析_用 Python 抓取 bilibili 弹幕并分析!
  9. python九九乘法表矩形_python实现九九乘法表
  10. MsSql2005如何进行自动定时备份数据库
  11. 被李小龙女儿起诉侵权后,真功夫态度强硬:不寻求和解,无更换商标计划
  12. 程序员交接文档_一个.NET程序员 2019 跳槽3次的悲惨故事
  13. mysql二进制包安装mysql_基于linux使用mysql二进制包安装mysql
  14. 实用的才是最好的,教你如何以MATLAB的方式实现高等应用数学问题(一)
  15. 1024献礼,全栈工程师进击
  16. R语言(4) plot函数介绍
  17. antv L7地图 绘制大小不受控制bug
  18. Java实现包含多级目录文件的筛选删除操作
  19. Gauss消元法(特解与通解)
  20. Vue实例基础5 (vue 条件渲染与列表渲)

热门文章

  1. Java实现推箱子小游戏
  2. 更新appid失败,登录用户不是该小程序的开发者
  3. 关于Chrome浏览器主页被2345篡改
  4. 山东大学计算机网络答案,《计算机网络基础》山东大学20春( B 卷)
  5. 《东周列国志》第十八回 曹沫手剑劫齐侯 桓公举火爵宁戚
  6. 修改jupyter notebook的默认浏览器
  7. 第十一章 ESL-通过事件控制FreeSWITCH
  8. 点燃我温暖你 李峋 两种爱心代码
  9. 串口接反会不会烧IO
  10. matlab读取bin文件