[设计模式]State模式
《Java与模式》
又称状态对象模式。状态模式是对象的行为模式。GOF95
一个对象的行为取决于一个或者多个动态变化的属性,这样的属性叫做状态。这样的对象叫做有状态的对象(stateful)。
状态模式把一个所研究的对象的行为包装在不同的状态对象中,每一个状态对象都属于一个抽象状态的一个子类。
状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。
模式所涉及的对象包括:
1. 抽象状态角色,state,定义一个接口,用以封装环境,context对象的一个特定的状态所对应的行为。
2. 具体状态, concreteState角色,每一个具体状态类都实现了黄精的一个状态所对应的行为
3. 环境角色,context,定义客户端所感兴趣的接口,并且保留一个具体状态类的实体。
public class Context{private State state;public void sampleOperation(){state.sampleOperation(); } public vlid setState(State state){this.state = state; } }public interface State{void sampleOperation(); }public class ConcreteState implements State{public void sampleOperation(){} }
在什么情况下使用状态模式
1. 一个对象的行为依赖于它所处的状态,对象的行为必须随着其状态的改变而改变。
2. 对象的某个方法里依赖于一重或多重的条件转移语句,其中有大量的代码。状态模式把条件转移语句的每一个分支都包装到一个单独的类里。这使得这些条件转移分支能够以类的方式独立存在和演化。维护这些独立的类也就不再影响系统的其他部分。
转载于:https://www.cnblogs.com/hongdanning/p/7569953.html
[设计模式]State模式相关推荐
- 设计模式:状态(State)模式
设计模式之状态(State)模式 在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态.当有状态 ...
- 设计模式--状态(State)模式
模式定义 允许一个对象在其内部状态改变时改变它的行为,从而使对象看起来似乎修改了其行为 类图 要点总结 State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时, ...
- [设计模式]单例模式的几种不同写法比较
1.饿汉式(无延迟加载) public class Hungry {private static Hungry instance = new Hungry();private Hungry(){};p ...
- 设计模式之 State(状态模式)通俗理解
23种设计模式 1 State 模式的定义 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 2 何时使用? 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了它的类.状态模式 ...
- 设计模式之状态模式(State)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- C#设计模式(19)——状态者模式(State Pattern)
原文:C#设计模式(19)--状态者模式(State Pattern) 一.引言 在上一篇文章介绍到可以使用状态者模式和观察者模式来解决中介者模式存在的问题,在本文中将首先通过一个银行账户的例子来解释 ...
- 设计模式学习笔记——状态(State)模式框架
设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...
- C++设计模式之状态模式(state)(行为型)
一 定义 状态模式:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况.把不同状态的操作分散到不同的状态对象 ...
最新文章
- 基于python的分类预测_机器学习算法(五): 基于支持向量机的分类预测
- 谁更了解你,是女朋友吗。不,是这些推荐算法。
- Android 柱状图
- iOS进阶(数据库之SQLite)
- MySQL 基础总结
- 使用HTML搭建知识库,TiddlyWiki 快速入门教程,尝试搭建个人知识库
- invalid cookie header httpclient
- electron打包失败在下载nsis的地方
- Copy On Write(写时复制)
- 【IT职场】2013中国IT领袖峰会马云演讲实录
- vb整合多个excel表格到一张_如何使用VB实现多个excel表格合并在一个EXCEL表格里面...
- 中国集成灶10大品牌排行榜揭晓,公认的集成灶10大品牌是哪几个?
- 安装DCOS,关于docker异常引发的调查
- v8引擎和v12引擎_v8和v12引擎的区别是什么?
- 2021CCPC女生专场
- 别找了,这个命令让你在字符串和十六进制间自由转换
- 服务器迁移的两种方式浅谈
- HTTP协议1)----对于应用层的详细讲解
- 2022-2028年中国工业品电商行业发展模式分析及未来前景规划报告
- 音频播客个人主页HTML5模板
热门文章
- oracle 创交表,创建交叉报表(oracle)_oracle
- android 弹出弹框2秒消失_基于HTML5 Canvas 实现弹出框
- python版本回退_Python爬虫之BeautifulSoup解析之路
- 西瓜创客python编程进阶收费_西瓜创客和编程猫有什么不同?哪个更值得报名?...
- Ubuntu如何安装setuptools
- css链接样式_CSS中的样式链接
- python求和_Python程序查找特殊求和系列的解决方案
- 散列碰撞_散列中的碰撞和碰撞解决技术
- python柱形图代码_Python数据可视化:基于matplotlib绘制「条形图」
- IO多路转接模型-----epoll