首页 > 其他分享 >设计模式之状态模式

设计模式之状态模式

时间:2023-10-19 11:25:37浏览次数:32  
标签:stateBase 状态 pState 模式 openDoor start bool 设计模式 public

状态模式,可以很好的解决掉if else或者switch case判断,使用g++ state.cpp statemain.cpp -o microwaveoven在Linux下编译即可执行microwaveoven查看结果

state.h
/*
@brief: 微波炉状态以及动作切换,三个状态:开门,关门,加热
		四个动作:开门,关门,开始加热,停止加热
@author: njit-sam
@date: 2023.10.19
*/
#ifndef _STATE_H_
#define _STATE_H_

#include <iostream>
using namespace std;

class stateBase
{
public:
	virtual bool openDoor() = 0;
	virtual bool closeDoor() = 0;
	virtual bool start() = 0;
	virtual bool stop() = 0;		
};

class doorOpen : public stateBase
{
public:
	bool openDoor();
	bool closeDoor();
	bool start();
	bool stop();			
};

class doorClosed : public stateBase
{
public:
	bool openDoor();
	bool closeDoor();
	bool start();
	bool stop();	
};

class heating : public stateBase
{
public:
	bool openDoor();
	bool closeDoor();
	bool start();
	bool stop();		
};

class microWaveOven
{
public:
	microWaveOven()
	{
		pStateOpen = new doorOpen();
		pStateClose = new doorClosed();
		pStateHeating = new heating();

		pState = pStateClose;
	}
	~microWaveOven()
	{
		delete pStateOpen;
		delete pStateClose;
		delete pStateHeating;
	}
	void openDoor();
	void closeDoor();
	void start();
	void stop();
private:

	stateBase* pState;
	stateBase* pStateOpen;
	stateBase* pStateClose;
	stateBase* pStateHeating;

};

#endif

state.cpp
/*
@brief: 微波炉状态以及动作切换,三个状态:开门,关门,加热
		四个动作:开门,关门,开始加热,停止加热
@author: njit-sam
@date: 2023.10.19
*/
#include"state.h"

bool doorOpen::openDoor()
{
	cout<<"doorOpen: already open"<<endl;
	return false;
}

bool doorOpen::closeDoor()
{
	cout<<"doorOpen: close"<<endl;
	return true;
}

bool doorOpen::start()
{
	cout<<"doorOpen: cant heat"<<endl;
	return false;
}

bool doorOpen::stop()
{
	cout<<"doorOpen: cant stop"<<endl;
	return false;
}

bool doorClosed::openDoor()
{
	cout<<"doorClosed: open"<<endl;
	return true;

}

bool doorClosed::closeDoor()
{
	cout<<"doorClosed: already close"<<endl;
	return false;

}

bool doorClosed::start()
{
	cout<<"doorClosed: start heat"<<endl;
	return true;

}

bool doorClosed::stop()
{
	cout<<"doorClosed: cant stop"<<endl;
	return false;
}

bool heating::openDoor()
{
	cout<<"heating: cant open"<<endl;
	return false;
}

bool heating::closeDoor()
{
	cout<<"heating: cant close"<<endl;
	return false;
}

bool heating::start()
{
	cout<<"heating: already start"<<endl;
	return false;
}

bool heating::stop()
{
	cout<<"heating : stop"<<endl;
	return true;
}

void microWaveOven::openDoor()
{
	if(pState->openDoor() == true)
		pState = pStateOpen;
}

void microWaveOven::closeDoor()
{
	if(pState->closeDoor() == true)
		pState = pStateClose;
}

void microWaveOven::start()
{
	if(pState->start() == true)
		pState = pStateHeating;
}

void microWaveOven::stop()
{
	if(pState->stop() == true)
		pState = pStateClose;
}

main.cpp
#include<stdio.h>
#include"state.h"

int main()
{
	microWaveOven mw0;
	mw0.openDoor();
	mw0.start();
	return 0;
}

标签:stateBase,状态,pState,模式,openDoor,start,bool,设计模式,public
From: https://www.cnblogs.com/njit-sam/p/17774286.html

相关文章

  • 关闭小米手机的USB安装提示弹窗(及开发者模式找不到MIUI优化的解决办法)
    结论: 1.设置-更多设置-开发者选项(划到最底部)-关闭“MIUI优化”2.如果没有这个选项,在开发者选项界面底部,找一个重置默认设置之类的按钮,多点几次就出来了。(或执行 adbshellsettingsandputsecuremiui_optimization0 Source:https://xiaomilive.com/how-to-dis......
  • 中国模式识别与计算机视觉大会|多模态模型及图像安全的探索及成果
    前言随着人工智能技术的不断演进,多模态大模型已是当下比较热的研究方向,它可以同时理解和生成多种输入和输出模态,如文本、图像、语音等,能够更好地模拟人类的多感知能力,给文档图像的分析处理带来了新的机遇和挑战!近期,中国模式识别与计算机视觉大会在厦门举办,是国内顶级的模式识别和计......
  • Node.js中常用的设计模式有哪些?
    本文由葡萄城技术团队首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。设计模式简介设计模式是由经验丰富的程序员在日积月累中抽象出的用以解决通用问题的可复用解决方案,它提供了标准化的代码设计方案提升开发体验。Node.js作......
  • 网卡混杂模式
    网卡工作模式广播模式:接收广播帧,MAC是0Xffffff的帧为广播帧。多播模式:接收多播帧。直接模式:只接收目的地址是自己MAC地址的帧。混杂模式:接收所有流经网卡的帧。网卡默认工作模式包括广播模式和直接模式,即只接收广播帧和发给自己的帧。混杂模式用于监控网络。查看、设置、取消混......
  • Kraft模式下Kafka脚本的使用
    Kafka集群版本:V3.5.1名称Node1Node2Node3IP172.29.145.157172.29.145.182172.29.145.183(1)查看Kraft集群中的状态以及Leader节点,投票节点使用--status可以查看集群选举次数/水位线以及投票节点等使用--replication可以查看Ledaer和Follower分布使用kafka-m......
  • 按返回键不返回上一个Activity (Activity的启动模式)
    在实际项目开发中往往会遇到这样的情况,有A、B、C三个Activity,在A中启动B,在B中启动C。想在C中按back键直接返回到A,但是按back键返回的是B。怎么办?其实很简单,只需要设置B的启动模式为singleInstance,然后在B启动C之后finish()即可。例如: <activityand......
  • [不靠谱程序员]订单付款成功后,不是先改状态,而是...
    做过税地系统或三方支付或对接过银行支付通道的朋友应该清楚,我们的支付系统在调用银行通道获取到付款单的终态后,涉及到记账、结算、通知下游商户等业务逻辑。这其中,有一项默认的操作是,更新付款单的状态。并且,应该先变更状态,变更状态成功后,然后再去执行其他业务逻辑。我们在参与......
  • Decorator 装饰者模式简介与 C# 示例【结构型4】【设计模式来了_9】
    〇、简介1、什么是装饰者模式一句话解释:  通过继承统一的抽象类来新增操作,再在使用时通过链式添加到对象中,达到与原有设定无关联可灵活附加。装饰者模式是一种行为设计模式,它允许向一个现有的对象添加新的行为,同时又不改变其结构。装饰者模式的基本概念是,将一个对象包装在......
  • 开发设计模式之单例模式
    一、单例模式这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。注意:......
  • 单例模式
    使用模块其实,**Python的模块就是天然的单例模式**,因为模块在第一次导入时,会生成`.pyc`文件,当第二次导入时,就会直接加载`.pyc`文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这......