[设计模式]状态模式 (State)

使用C#调用百度地图并实现坐标点的设置以及读取 使用C#调用百度地图申请百度地图密钥以及查看百度API程序实现功能:最终图利用webBrowser控件展示地图 申请百度地图密钥以及查看百度API 网址:http://lbsyun.baidu.com/apiconsole/key#/home 网址:http://lbsyun.baidu.com/jsdemo.htm#c1_3 程序实现功能: 1、输入网址那可以调用本地的html文件,也可以访问其他网站 2、输入坐标、添加坐标按钮,可以将坐标值传入html文件中,显示在经纬度的文本框中 3、定位按钮可以 阅读详情

1.意图

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

2.结构与参与者


3.适用性

       1)一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

       2)一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或者多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这个对象可以不依赖于其他对象而独立变化。

4.效果

       1)它将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

       2)它使得状态转换显示化。

       3)State对象可被共享(见适用性2)。

5.代码示例

       一个银行账户的例子。

#include <iostream>
#include <string>

using namespace std;

//抽象状态类
class State
{
	
public:
	double m_amount;                          //这里写得非常丑陋
	virtual WithDraw(double amount)=0;
	virtual Diposit(double amount)=0;
};

//欠款状态
class RedState:public State
{
//private: StateChangeCheck()
public:
	RedState(double amount){m_amount=amount;}
	virtual WithDraw(double amount)
	{
		cout << "没有余额可以提现"<<endl;
	}
	virtual Diposit(double amount)
	{
		m_amount+=amount;
		cout << "您存入了:¥"<<amount<<endl; 
	}
};

//白银VIP
class SilverState:public State
{
public:
	SilverState(double amount){m_amount=amount;}
	virtual WithDraw(double amount)
	{
		m_amount-=amount;
		cout << "您取出了:¥"<<amount<<endl; 
	}
	virtual Diposit(double amount)
	{
		m_amount+=amount;
		cout << "您存入了:¥"<<amount<<endl; 
	}
};

//黄金VIP
class GoldState:public State
{
public:
	GoldState(double amount){m_amount=amount;}
	virtual WithDraw(double amount)
	{
		m_amount-=amount;
		cout << "您取出了:¥"<<amount<<endl; 
	}
	virtual Diposit(double amount)
	{
		m_amount+=amount;
		cout << "您存入了:¥"<<amount<<endl; 
	}
};

//Context类
class Account
{
private:
	State* m_pstate;
	string m_sowner;
	void StateChangeCheck()  
//不改变状态都要新建另外一个实例
//每次存取款的操作都将引起一个实例的构建,并且可能是多余的
//怎么改进???
	{
		if (m_pstate->m_amount<0)
		{
			m_pstate=new RedState(m_pstate->m_amount);
			cout << "小子,你欠款了,快还钱!!!"<<endl;
		}
		else if (m_pstate->m_amount>10000)
		{
			m_pstate=new GoldState(m_pstate->m_amount);
			cout << "您现在的身份是黄金VIP"<<endl;
		}
		else 
		{
			m_pstate=new SilverState(m_pstate->m_amount);
			cout << "您现在的身份是白银VIP"<<endl;
		}
	}
public:
	Account(string owner=""):m_sowner(owner)
	{
		m_pstate=new RedState(-10);
	}
	Account(State* state,string owner=""):m_sowner(owner),m_pstate(state){}
	void WithDraw(double amount)
	{
		m_pstate->WithDraw(amount);
		StateChangeCheck();
	}
	void Diposit(double amount)
	{
		m_pstate->Diposit(amount);
		StateChangeCheck();
	}
};
//客户端
int main()
{
	SilverState* sp=new SilverState(1000);
	Account* ap=new Account(sp,"sicofild");
	ap->Diposit(10000.00);
	ap->WithDraw(9000.00);
	ap->WithDraw(5000);
	ap->Diposit(100000.00);
	return 0;
}


C#客户端对接工厂MES的方法 本文介绍了使用C#实现WebApi客户端与工厂MES系统交互的方法。主要包括四个步骤:1)配置工控机IP地址;2)获取服务器URL;3)创建HttpHelper帮助类实现单例模式HttpClient,提供异步POST请求方法;4)通过实例化帮助类实现设备状态数据的JSON格式发送与接收。该方案采用异步通信方式,支持超时处理,能够满足大多数MES系统交互需求,帮助工程师快速完成设备与MES系统的数据对接。文中给出了核心代码片段和完整的数据交互流程示例。 阅读详情

相关推荐

路径规划:D*Lite寻路算法详解

D*Lite详解目录

mkr67n的博客 2万+

设计模式24:State Pattern (状态模式)

英文原文:http://www.dofactory.com/Patterns/PatternState.aspx一、State Pattern (状态模式)Define: Allow an object to alter its behavior when its internal state changes. The object will appear to change its cl

薛敬明的专栏 1897

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4229

设计模式 -- 状态模式(State Pattern)

允许一个对象在内部状态改变时改变它的行为。 应用场景 一个对象的行为取决于它的状态,并且它在运行时根据状态改变它的行为。 代码中包含大量与对象状态相关的判断语句。 优点: 将不同的状态隔离 把各种状态的转换逻辑,分布到State的子类中,减少相互间依赖 增加新的状态非常简单 状态模式与责任链模式的区别 状态模式和责任链模式都能消除 if-else 分支过多的问题。但在某些情况下,状态模式中的状态可以理解为责任,那么在这种情况下,两种模式都可以使用。

魔法师之家 1792

VisionMaster SDK C#二次开发核心技术指南

以下是基于**VisionMaster SDK C#二次开发核心技术指南**,结合实战案例与关键代码解析,帮助开发者快速掌握工业视觉应用集成。

东城十三 3052

【RTOS】 Vxworks 653 第一章 —— 初识 vx653 3.x

。。不是很重要,自己搜吧鲁棒分区是一种确保共享计算资源中独立运行功能实现​​时空隔离​​的机制,其目标是为集成模块中的混合临界性应用提供与联邦式部署(federated implementation)同等级别的功能隔离保障。具体表现为:​​多关键性共存​​:支持不同安全等级应用(如飞控系统A级与娱乐系统D级)在同一模块中协同运行。​​抗干扰能力​​:防止未授权或意外的时空干扰(如内存越界、时间窗口冲突),确保应用间互不影响。​​。

qq_38183694的博客 1280

C#设计模式读书笔记之状态模式(State Pattern)

状态模式(State pattern)【使用频率:★★★☆☆】 1.概述:允许一个对象在其内部状态改变时改变它的行为。 2.解决的问题:主要解决的是当控制一个对象状态转换的条件过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的逻辑判断简单化。 3.模式中的角色   3.1上下文环境(Context):在Context类中维护一个抽象状态类State的实例,这个...

qq826364410的专栏 528

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解

Qoder AI 编程工具从部署到深度使用实战详解

congge 8337

设计模式之状态模式(State Design Pattern)

状态模式,是11种行为型模式之一。一个生存在流程整个周期的对象,因事件触发改变对象的状态进而影响对象的行为(流程的走向)。状态模式就是把对象的行为与状态进行封装,通过改变状态进而影响行为。 状态模式几个关键对象类型: Context:一个生存在流程整个周期的对象 Event:触发改变对象的状态的事件(Event)或条件(Condition) State: 封装对象状态的抽象类(State)和具体实现类 本文以请假流程为例,如图: 请假流程有的主管、部门、人事部都有各自的职责,而且有先后依..

xjj1314的专栏 491

Oracle EBS Interface/API(43) -自定义AP发票状态说明API

在某项目,客户需求获得AP发票的状态说明,例如对账系统或者某些报表。由于标准系统未提供状态说明,需要通过AP发票的标准Form获得相关业务逻辑,然后自定义AP发票状态说明API。

陈显平的专栏-Oracle EBS 605

使用Simulink进行四足机器人的非线性动力学建模与仿真

四足机器人的运动包含多个自由度(DOF),包括腿部的摆动和支撑阶段的动力学特性。由于存在接触力、摩擦以及不同地形的影响,四足机器人的动力学行为呈现出高度的非线性特征。因此,构建准确的非线性动力学模型对于研究机器人的运动学和动力学特性至关重要。定义代表机器人状态的变量,如位置、速度、角度和角速度。matlab深色版本通过本指南,我们介绍了如何基于Simulink搭建一个四足机器人的非线性动力学模型,并进行了详细分析。

xiaoheshang_123的博客 311

JAVA设计模式之 状态模式【State Pattern】

一、概述     当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化。状态模式是一种对象行为型模式。 二、适用场景     用于解决系统中复杂对象的多种状态转换以及不同状态下行为的封装问题。简单说就是处理对象的多种状态及其相互转换。

小吕丶Code阶区 3891

ARFoundation系列讲解 - 24 锚点

一、添加平面检测和平面可视化 请参考 ARFounnation快速入门-08平面检测 案例 二、添加射线检测 1.在AR Session Origin 组件上添加ARRaycastManager 脚本

a451319296的博客 4876

设计模式-状态模式-State Pattern

这种模式通过将状态相关的行为封装在独立的类中,并在运行时根据状态对象来切换这些行为,从而使得对象能够在内部状态变化时合理地更改其行为。状态模式的优点在于它将状态相关的行为封装在具体的状态类中,使得状态转换逻辑清晰,并且可以在运行时动态地改变对象的行为。状态模式的优点包括局部化了状态相关的操作,将状态转换逻辑封装在状态对象内部,以及可以在运行时切换对象的行为。:在没有使用状态模式的情况下,对象的状态管理可能需要大量的条件分支语句,状态模式可以将这些条件分支分散到不同的状态类中。

wesigj的博客 2030

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

设计模式-18状态模式State Pattern

状态模式是一种行为设计模式,允许对象在内部状态改变时改变其行为。当对象的行为取决于状态且需要避免大量条件判断时,该模式特别有用。其核心结构包括:上下文(Context)维护当前状态,状态接口(State)定义行为,具体状态类实现不同状态下的行为。典型应用场景如自动售货机,通过状态模式可清晰管理"无硬币"、"有硬币"、"售出"等状态转换,避免复杂的条件分支,使代码更易维护和扩展。

d3y1`5 81_09 964

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

状态模式(State Design Pattern)

以此回顾《设计模式之禅》及其他设计模式书籍、视频中的状态模式。 什么是状态模式? Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. (当一个对象的内在状态改变时,允许它修改自己的行为。这个对象看起来像是改变了类)

西西&&C的专栏 1427

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

/** * 状态模式。 * @author Bright Lee */ public class StatePattern { public static void main(String[] args) { Context context = new Context(); context.request(); context.request(); } } cla...

look4liming的专栏 249

设计模式(Design pattern)之状态模式(state Pattern)

状态模式在电梯系统中的应用 该代码展示了状态模式在电梯控制系统中的实现。通过抽象StateElevator类定义四种操作(open/close/run/stop),并由四个具体状态类(Open/Run/Stop/Close)实现不同状态下的行为逻辑。Context类作为环境角色维护当前状态,各状态类可通过super.context改变状态。这种设计避免了大量条件判断,使状态转换清晰可见,但实际应用中可能存在状态类膨胀的问题。示例演示了电梯从开启状态开始,依次执行运行、开启、关闭和停止操作的状态转换过程。

RR1335 之代码才是动力源 220

【设计模式】——状态模式(State Pattern)

状态模式(State Pattern)是一种重要的行为型设计模式,它允许一个对象在其内部状态改变时改变其行为,使得对象看起来像是改变了它的类。状态模式通过将状态相关的行为封装在独立的状态类中,有效地简化了条件逻辑,提高了代码的可维护性和可扩展性。

J^T的博客 981

23种设计模式之状态模式(State Pattern)

本篇文章将23种设计模式中的状态模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

设计模式-状态模式(State Pattern)

状态模式 定义 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。 类型 行为型。 UML类图 角色 环境(Context)角色:环境角色含有状态角色的对象,并且可以处理一些请求,这些请求最终产生的响应会与状态相关。 状态(State)角色:状态角色定义了每一个状态的行为接口,这些行为将会在Context中得以使用。 具体状态(ConcreteState)角色:实现了相关行为...

kaven 1248

设计模式学习—状态模式(State Design Pattern)

设计模式之状态模式,一种行为型模式

闲鱼的博客 1034

Java设计模式——状态模式(STATE PATTERN)

Java设计模式——状态模式(STATE PATTERN) 转载:http://blog.youkuaiyun.com/u012401711/article/details/52675873

hackxiaoF的专栏 412

设计模式——状态模式(State Pattern)

状态模式(State Pattern)又称状态机模式,是允许对象在内部状态发生改变时改变他的的行为,类的行为由状态决定,不同的状态有着不同的行为,对象看起来好像修改了它的类。属于行为型模式。一般涉及到电商订单相关的,会采用状态模式来设计,不同的订单状态,响应的都有不同的操作。 适用场景 1) 行为随状态改变而改变的场景 2) 一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态状态抽象对象.........

Lucifer ZHAO 3747

23中设计模式C++实现(4)之状态模式(State Pattern)

简述: 状态模式又叫做有限状态机。适应场景:我们的对象有多种状态,单对象同一时刻只能保持某一种状态,并当内部变量或者内部变量变化时,我们的对象会在这些状态中变换。 UML结构图 Context(上下文):定义一个与 Client 交互的接口。它维护对 ConcreteState 对象的引用,可以用该对象来定义当前状态。 State(抽象状态):定义接口,来声明每个 ConcreteSt...

请叫我少爷的博客 296

秒懂设计模式之状态模式(State Pattern)

[版权申明] 非商业目的注明出处可自由转载 博文地址: 出自:shusheng007 设计模式汇总篇,一定要收藏: 永不磨灭的设计模式(有这一篇真够了,拒绝标题党) 概述 状态模式在日常开发中是一个非常实用的模式,可以将你的代码逼格迅速提升一个档次,所以让我们开始今天的卓越之旅吧。 类型 行为型(behavioral) 难度 3颗星 定义 当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 定义对于初学者没啥用,因为字都认识却无法理解其中的含义。必须等学完了,回过头来看才能更加深.

ShuSheng007的程序人生 3088
上一篇: [设计模式]设计模式中的指导原则
下一篇: [设计模式]观察者模式(Observer)
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值