go设计模式之状态模式浅谈


本文摘自网络,作者go_hiro,侵删。

概念

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

何时使用

当一个任务,存在大量与状态有关的条件语句,并且每种条件下,需要执行不同的逻辑时

状态模式的组成

Status:状态 用于抽象状态行为类的行为
Context:状态环境 维护Status状态的切换,实现不同状态下,对外展示不同行为
StatusObj:状态行为类 实现Status接口的行为

下面以工作日,和休息日两种不同的状态下,Do方法产生不同行为为例说明

1.定义Status接口

//接口定义了各种不同状态下的行为方法
type Status interface {
    Do()
}

2.定义StatusObj

分别定义工作日,休息日结构,并且实现Status

//定义工作日结构体,并实现Status
type Workday struct{}

func (*Workday) Do() {
    fmt.Println("努力工作")
}

//定义休息日结构体,并实现Status
type Offday struct{}

func (*Offday) Do() {
    fmt.Println("快乐生活")
}

3.定义Context

//定义Context,内部嵌套了Status
type Context struct {
    Status
}
//定义方法SetStatus用于状态切换
func (c *Context) SetStatus(status Status) {
    c.Status = status
}

4.使用如下

context := Context{
    &Workday{},
}
context.Do() //打印出努力工作
context.SetStatus(&Offday{})//切换为休息日状态
context.Do() //打印出快乐生活
context.SetStatus(&Workday{})//再切换为工作日状态
context.Do() //打印出努力工作


相关阅读 >>

Golang 限流器,控制并发,线程池

Go语言开发分布式任务调度 轻松搞定高性能crontab

Golang中的defer关键字什么时候生效

visdom: rust版使用类jquery api的html解析操作库

Golang context深入理解

大型迷惑现场之[]*t是什么?*[]t是什么?*[]*t又是什么?

Go语言sync包的学习(mutex、waitgroup、cond)

Go语言简介

手撸Golang Go与微服务 saga模式之8 集成测试

Golang版本的简易数据同步

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...