JAVA设计模式(18):行为型-状态模式(State)

场景:

电梯的运行

  • 维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态

红绿灯

  • 红灯、黄灯、绿灯

企业或政府系统

  • 公文的审批状态

报销单据审批状态

假条审批

网上购物时,订单的状态

  • 下单
  • 已付款
  • 已发货
  • 送货中
  • 已收货

核心

用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题

结构

Context环境类

  • 环境类中维护一个State对象,它是定义了当前的状态

State抽象状态类

ConcreteState具体状态类

  • 每一个类封装了一个状态对应的行为
public class Context {
	private State state;

	public void setState(State state) {
		System.out.println("修改状态");
		this.state = state;
		this.state.handle();
	}

}

public interface State {
	void handle();
}

public class BookState implements State{

	@Override
	public void handle() {
		// TODO Auto-generated method stub
		System.out.println("房间已预订");
	}

}

public class CheckedState implements State{

	@Override
	public void handle() {
		// TODO Auto-generated method stub
		System.out.println("房间已入住");
	}

}

public class FreeState implements State{

	@Override
	public void handle() {
		// TODO Auto-generated method stub
		System.out.println("房间空闲,没人住");
	}

}

开发中常见的场景

  1. 银行系统中账号状态的管理
  2. OA系统中公文状态的管理
  3. 酒店系统中房间状态的管理
  4. 线程对象各状态之间的切换
时间: 2024-10-20 21:37:20

JAVA设计模式(18):行为型-状态模式(State)的相关文章

Java设计模式菜鸟系列(十三)状态模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859 状态模式(State):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式说白了就是一个对像有不同的状态,不同的状态对应不同的行为,它其实是对switch case这样的语句的拓展. 一.uml建模: 二.代码实现 /** * 示例:状态模式-- 一个对像有不同的状 态,不同的状态对应不同的行为 * * 下面四则运算为例 */ interface S

设计模式之行为型状态模式

当一个对象内部状态发生改变时,会导致其行为的改变,这看起来像是改变了对像.平时写代码的时候经常会遇到要写很多条件判断语句的情况,那么怎么减少代码中的条件判断语句呢?对于这类分支条件内部独立结果的管理,可以使用状态模式,每一种条件作为对象的一种状态,面对不同的判断结果,其实就是选择对象内的一种状态. // 投票结果状态对象 var ResultState = function() { // 判断结果保存在内部状态中 var States = { // 每种状态作为一种独立方法保存 state0:

设计模式之状态模式(State)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } class Storage

设计模式 - 状态模式(state pattern) 详解

状态模式(state pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 状态模式(state pattern): 允许对象在内部状态改变时改变它的行为, 对象看起来好像修改了它的类. 建立Context类, 包含多个具体状态(concrete state)类的组合, 根据状态的不同调用具体的方法, state.handle(), 包含set\get方法改变状态. 状态接口(state interface), 包含抽象方法handle(),

设计模式 - 状态模式(state pattern) 未使用状态模式 详解

状态模式(state pattern) 未使用状态模式 详解 本文地址: http://blog.csdn.net/caroline_wendy 状态模式可以控制状态的转换, 未使用设计模式时, 程序会非常繁杂. 具体方法: 1. 状态转换类. /** * @time 2014年7月11日 */ package state; /** * @author C.L.Wang * */ public class GumballMachine { final static int SOLD_OUT =

java设计模式-创建型

1.设计模式介绍 1.1 设计模式的概念 1.设计模式是一套被反复使用,多数人知晓,经过分类编码目的的优秀代码设计经验的总结. 2.设计模式贯彻的原理:面向接口编程,而不是面向对象实现. 3.设计模式的目标:降低耦合性,增强灵活性. 1.2 设计模式的要素 1.模式名称 2.问题 3.环境与初始环境 4.解决方案 5.效果 6.举例 7.末态环境 8.推理 9.其他有关模式 10.已知的应用 1.3设计模式的分类 1.创建型 1.1  单例模式 1.2  工厂模式 1.3  抽象工厂模式 1.4

设计模式(11)---状态模式

状态模式 State (行为型模式) 1.概述 状态模式:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类. 例如:有一个账户,当余额大于等于0时,为正常状态,可以存款,取款:当-2000<=余额<0时,为透支状态,可以存款取款以及计算利息:当余额<-2000时,为限制状态,不能取款,可以存款,计算利息.根据账户余额的不同,状态会改变,每个状态的行为也会变化. 2.结构图 3.代码 1 /* 2 * 账户类 也是Context 环境类 3 */ 4 public c

Java设计模式(六)合成模式 享元模式

(十一)合成模式 Composite 合成模式是一组对象的组合,这些对象可以是容器对象,也可以是单对象.组对象允许包含单对象,也可以包含其他组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 保证客户端调用单对象与组合对象的一致性. class TreeNode{ private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>();

java设计模式--观察者模式和事件监听器模式

文章转载于:http://www.java2000.net/p9452 复习设计模式,看到observer观察者模式,说法是该模式和iterator迭代器模式类似已经被整合进jdk,但是jdk提供了两种接口: 一.java.util.Observer -- 观察者接口 对应: java.util.Observable --受查者根类 二.java.util.EventListener -- 事件监听/处理接口 对应: java.util.EventObject -- 事件(状态)对象根类 研究了