状态模式(STATE)

Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,State(状态)模式是比较常用的一个模式.

应用场景:如果需要在 1、不同的状态(可能会对应相应的行为),

2、不同的行为;

间反复进行切换,则应优先考虑状态模式。

在此写了7个java类来描述说明State设计模式;

1、State.java 状态接口

2、StateA.java 状态A

3、StateB.java 状态B

4、StateC.java 状态C

5、StateD.java 状态D

6、StateManager.java 状态管理类

7、StateTest.java 带有main方法的测试类

=============== 1、State.java 状态接口

public interface State {

//执行'上一步' 操作

public void lastStep(StateManager c);

//执行'下一步' 操作

public void nextStep(StateManager c);

}

=============== 1

end

=============== 2、StateA.java 状态A

public class StateA implements State {

//A->C

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateC());

}

//A->B

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateB());

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State A";

}

}

=============== 2

end

=============== 3、StateB.java 状态B

public class StateB implements

State {

//B->A

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateA());

}

//B->C

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateC());

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State B";

}

}

=============== 3

end

=============== 4、StateC.java 状态C

public class StateC implements

State {

//C->null(end)

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(null);

}

//C->D

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateD());

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State C";

}

}

=============== 4

end

=============== 5、StateD.java 状态D

public class StateD implements

State {

//D->B

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateB());

}

//D->nlll(end)

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(null);

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State D";

}

}

=============== 5

end

=============== 6、StateManager.java 状态管理类

public class StateManager {

//状态

private State state;

//没有状态的构造器(不可见)

private StateManager(){}

//带有初始状态的构造器

public StateManager(State initState){

this.state =

initState;

}

//设置初始状态

public void setState(State state) {

this.state =

state;

}

//下一步

public void nextStep(){

if(this.state != null)

this.state.nextStep(this);

}

//上一步

public void lastStep(){

if(this.state != null)

this.state.lastStep(this);

}

//返回下一个状态

public State nextState(){

return

this.state;

}

}

=============== 6 end

=============== 7、StateTest.java 状态测试类

public class StateTest {

public static

void main(String[] args) {

// TODO

Auto-generated method stub

//顺行起点A

State state

= new StateA();

StateManager

controller = new StateManager(state);

for (int i =

0; i < 6; i++) {

state = controller.nextState();

System.out.print(state);

if(state == null) break;

System.out.print("->");

//顺流

controller.nextStep();

}

System.out.println("");

//顺行起点D

State

converseState = new StateD();

controller =

new StateManager(converseState);

for (int i =

0; i < 6; i++) {

state = controller.nextState();

System.out.print(state);

if(state == null) break;

System.out.print("->");

//逆流

controller.lastStep();

}

}

}

=============== 7

end

java状态模式例子答案_[转载]java设计模式_状态模式(带例子)相关推荐

  1. JAVA架构师之路十五:设计模式之策略模式

    JAVA架构师之路十四:设计模式之模板模式 策略模式 1. 策略模式 2. 优惠券案例 3. 支付案例 人生的游戏不在于拿了一副好牌,而在于怎样去打好坏牌,世上没有常胜将军,勇于超越自我者才能得到最后 ...

  2. java枚举类型有什么用_[转载] Java中枚举类型的使用 - enum

    本文转载自博客 - Java枚举类型, 博主对原文内容及结构作了一定的修改. 1 枚举类的编译特性 从JDK 5开始, Java中多了一个关键字 -- enum: 可以将一组具有名称的值(包括Stri ...

  3. java string()函数_转载java String.split()函数的用法详解

    转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...

  4. java对象工厂池_[转载]Java对象池技术的原理及其实现

    作者:汪永好 出处:计算机与信息技术 责任编辑: 方舟 [ 2006-11-25 07:00 ] 摘 要 :本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术 ...

  5. 115道Java面试题及答案分享,java程序员赶紧收好

    115道Java经典面试题(面中率最高.最全) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可 ...

  6. java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...

  7. 1110道Java面试题及答案(最新Java初级面试题大汇总)

    开篇小叙 现在 Java 面试可以说是老生常谈的一个问题了,确实也是这么回事.面试题.面试宝典.面试手册......各种 Java 面试题一搜一大把,根本看不完,也看不过来,而且每份面试资料也都觉得 ...

  8. java面试题26-107(答案)_Java面试题汇总,160道带你征战大厂

    前言 答案文末自取 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整 ...

  9. 观察者模式与职责链模式的相同和不同_GOF设计模式(策略模式,职责链模式)...

    策略模式(整体的替换算法) 基本介绍:对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法.(定义一组算法,将每个算法都封装起来,并且使他们之间可以互换).多用于封装算法 类图 角色: 上下文 ...

最新文章

  1. Windows PowerShell in Action
  2. iOS APP之本地数据存储(译)
  3. mybatis查询返回空,SQL数据库执行有数据!
  4. 畅玩4c刷android 9.0,华为畅玩4C电信版 CyanogenMod 13.0_Android_6.0.1 【HRT_chiwahfj】
  5. matlab错误使用builtin,MATLAB环境下运行MATLAB函数时发生异常
  6. Android P (1)---开发指南
  7. 服务器块格式不正确的是什么,c#-服务器标签格式不正确.(databinder.eval)
  8. java打印unicode,在Java中打印Unicode字符
  9. Siemens M65...
  10. 线性代数学习指导与MATLAB编程实践,21世纪高等理工科重点课程辅导丛书:线性代数学习指导与MATLAB编程实践...
  11. 遥感软件显示影像名称-影像挑选查看等操作
  12. 鸿蒙系统和全屋智能,不断升级“常用常新” 搭载鸿蒙系统的全屋智能有多酷?...
  13. 【超级详细的Vue安装与配置教程】
  14. 怎么用dos系统进入服务器,怎么进入dos_如何进入dos的方法(图文介绍)
  15. excel查重复_个人永久性免费Excel催化剂功能第98波零代码零距离轻松接触并拥有金融大数据...
  16. UEBA架构设计之路4:异常、威胁指标和威胁
  17. 空气清爽才是真正的上班的地方
  18. Zabbix实现企业微信报警
  19. s盒密码c语言源代码csdn,AES中S盒的c语言实现及代码
  20. 个体工商户注册后,都需做哪些事呢?这3点很重要

热门文章

  1. linux 在文本模式下(命令模式)下,中文是乱码,如何解决?
  2. 调整weblogic内存的分配和使用
  3. [CTO札记]互联网一定要免费吗?网络文学是继网络游戏后又一成功的收费模式...
  4. MFC中的InitInstance()函数应该怎样理解
  5. python编程django项目django.template.exceptions.TemplateDoesNotExist: registration/login.html解决方法
  6. 计算机二级c在哪里学习,2017年计算机二级C语言考点学习
  7. OpenBFDD的安装与使用
  8. python做exe开发教程_python做exe开发教程
  9. opencv 图片边缘渐变_基于OpenCV的图像卡通化
  10. C51中变量类型和范围