【设计模式】—— 状态模式State
前言:【模式总览】——————————by xingoo
模式意图
允许一个对象在内部改变它的状态,并根据不同的状态有不同的操作行为。
例如,水在固体、液体、气体是三种状态,但是展现在我们面前的确实不同的感觉。通过改变水的状态,就可以更改它的展现方式。
应用场景
1 当一个对象的行为,取决于它的状态时
2 当类结构中存在大量的分支,并且每个分支内部的动作抽象相同,可以当做一种状态来执行时。
模式结构
Context 环境角色,里面包含状态对象
class Context{
private State state;
public void setState(State state) {
this.state = state;
}
public void operation(){
state.operation();
}
}
State 状态的抽象接口
interface State{
public void operation();
}
ConcreteState 具体的状态角色
class ConcreteState1 implements State{
public void operation(){
System.out.println("state1 operation");
}
}
class ConcreteState2 implements State{
public void operation(){
System.out.println("state2 operation");
}
}
class ConcreteState3 implements State{
public void operation(){
System.out.println("state3 operation");
}
}
全部代码
package com.xingoo.test.design.state;
class Context{
private State state;
public void setState(State state) {
this.state = state;
}
public void operation(){
state.operation();
}
}
interface State{
public void operation();
}
class ConcreteState1 implements State{
public void operation(){
System.out.println("state1 operation");
}
}
class ConcreteState2 implements State{
public void operation(){
System.out.println("state2 operation");
}
}
class ConcreteState3 implements State{
public void operation(){
System.out.println("state3 operation");
}
}
public class Client {
public static void main(String[] args) {
Context ctx = new Context();
State state1 = new ConcreteState1();
State state2 = new ConcreteState2();
State state3 = new ConcreteState3(); ctx.setState(state1);
ctx.operation(); ctx.setState(state2);
ctx.operation(); ctx.setState(state3);
ctx.operation();
}
}
运行结果
state1 operation
state2 operation
state3 operation
【设计模式】—— 状态模式State的更多相关文章
- C#设计模式——状态模式(State Pattern)
一.概述在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为.如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构 ...
- 大话设计模式--状态模式 State -- C++实现实例
1.状态模式: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就像是改变了其类. 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂, 把状态的判断逻辑转移到表示不同状态的一系列类 ...
- 深入浅出设计模式——状态模式(State Pattern)
模式动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的 (stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的.当一个这样的 ...
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- 北风设计模式课程---状态模式State(对象行为型)
北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...
- 状态模式(State)-设计模式
软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板.软件模式并非仅限于设计模式,还包括 架构模式.分析模式和过程模式等,实际上,在软件生存期的每一个阶段都存在着一些被认 ...
- 二十四种设计模式:状态模式(State Pattern)
状态模式(State Pattern) 介绍允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它所属的类. 示例有一个Message实体类,对它的操作有Insert()和Get()方法, ...
- JAVA 设计模式 状态模式
用途 状态模式 (State) 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式是一种行为型模式. 结构
随机推荐
- ansible role 理解
1.roles意为角色,主要用于封装playbook实现复用性.在ansible中,roles通过文件的组织结构来展现.
- [POI2007]旅游景点atr BZOJ1097
分析: 我们可以考虑,因为我们必须经过这些节点,那么我们可以将它状压,并且我们因为可以重复走,只是要求停顿前后,不要求遍历前后,那么我们之间存一下点与点之间的最短路,之后每次转移一下就可以了. f[i ...
- c# 无边框窗体的边框阴影
Windows API: using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...
- Huploadify V2.1+ SpringMVC上传文件的实现
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 20155333 《网络对抗》 Exp8 Web基础
20155333 <网络对抗> Exp8 Web基础 基础问题 (1)什么是表单? 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用 ...
- C#集合与泛型集合
看到这个标题,大家应该就知道有泛型集合,就有非泛型集合 既然都是集合,咱们今儿就简单的来对比讲解下 需要记住的不算太多,理解记忆.理解记忆 2017-11-0411:39:09 C# 泛型集合之非泛型 ...
- Asp.Net_HttpModule的应用
IHttpModule向实现类提供模块初始化和处置事件. IHttpModule包含兩個方法: public void Init(HttpApplication context);public voi ...
- OpenStack与OpenDaylight的对接过程
由于项目中需要使用OpenDaylight(Oxygen)替换OpenStack(Otaca)中的neutron-openvswitch-agent,能找到的一些资料都是比较旧的版本,官网上的文档也一 ...
- Json和Map互转,四个包(org.json/net.sf.json/com.google.gson/com.alibaba.fastjson)
目前使用的(org.json/net.sf.json/com.google.gson/com.alibaba.fastjson)这四种json-map互转,其他的以后在补充.............. ...
- Hive的一些理解
首先谈一下关于hive和hbase的区别的疑问(完全不是一个东西): 本质上来说hive和hbase没什么关系,虽然都是表,查数据等,但是他们根本就不是一个层面的东西 hive就是一个rapduce的 ...