求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   模型库  
会员   
 


基于 UML 和EA进行分析设计
7月30-31日 北京+线上



大模型核心技术RAG、MCP与智能体实践
8月14-15日 厦门



图数据库与知识图谱
8月23日-24日 北京+线上
 
 
 

C语言和设计模式 教程
开篇
单件模式
原型模式
组合模式
模板模式
工厂模式
责任链模式
抽象工厂模式
迭代器模式
外观模式
代理模式
享元模式
装饰模式
适配器模式
策略模式
中介者模式
建造者模式
桥接模式
观察者模式
备忘录模式
解释器模式
命令模式
状态模式
访问者模式
继承、封装、多态
 
 

状态模式
1093 次浏览
37次  

状态模式是协议交互中使用得比较多的模式。比如说,在不同的协议中,都会存在启动、保持、中止等基本状态。那么怎么灵活地转变这些状态就是我们需要考虑的事情。假设现在有一个state,

typedef struct _State  
{
void (*process)();
struct _State* (*change_state)();

}State;

说明一下,这里定义了两个变量,分别process函数和change_state函数。其中proces函数就是普通的数据操作,

void normal_process()  
{
printf("normal process!\n");
}

change_state函数本质上就是确定下一个状态是什么

struct _State* change_state()  
{
State* pNextState = NULL;

pNextState = (struct _State*)malloc(sizeof(struct _State));
assert(NULL != pNextState);

pNextState ->process = next_process;
pNextState ->change_state = next_change_state;
return pNextState;
}

所以,在context中,应该有一个state变量,还应该有一个state变换函数。

typedef struct _Context  
{
State* pState;
void (*change)(struct _Context* pContext);

}Context;

void context_change(struct _Context* pContext)
{
State* pPre;
assert(NULL != pContext);

pPre = pContext->pState;
pContext->pState = pPre->changeState();
free(pPre);
return;
}


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1093 次浏览
37次
 捐助