`
Flyingh
  • 浏览: 18301 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

State

 
阅读更多

State Pattern:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.

状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化

下面以Player的几种状态为例,代码如下:

State.java

 

package com.flyingh.istate;

public interface State {
	void play();

	void pause();

	void quickForward();

	void quickBackward();

	void stop();
}

 Player.java

 

package com.flyingh.player;

import com.flyingh.istate.State;
import com.flyingh.state.PauseState;
import com.flyingh.state.PlayState;
import com.flyingh.state.QuickBackwardState;
import com.flyingh.state.QuickForwardState;
import com.flyingh.state.StopState;

public class Player {
	private State playState;
	private State pauseState;
	private State quickForwardState;
	private State quickBackwardState;
	private State stopState;
	private State currentState;

	public Player() {
		super();
		playState = new PlayState(this);
		pauseState = new PauseState(this);
		quickForwardState = new QuickForwardState(this);
		quickBackwardState = new QuickBackwardState(this);
		stopState = new StopState(this);
		currentState = stopState;
	}

	public void run() {
		System.out.println("运行播放器!");
	}

	public void play() {
		currentState.play();
	}

	public void pause() {
		currentState.pause();
	}

	public void quickForward() {
		currentState.quickForward();
	}

	public void quickBackward() {
		currentState.quickBackward();
	}

	public void stop() {
		currentState.stop();
	}

	public void exit() {
		System.out.println("退出播放器!");
	}

	public State getPlayState() {
		return playState;
	}

	public void setPlayState(State playState) {
		this.playState = playState;
	}

	public State getPauseState() {
		return pauseState;
	}

	public void setPauseState(State pauseState) {
		this.pauseState = pauseState;
	}

	public State getQuickForwardState() {
		return quickForwardState;
	}

	public void setQuickForwardState(State quickForwardState) {
		this.quickForwardState = quickForwardState;
	}

	public State getQuickBackwardState() {
		return quickBackwardState;
	}

	public void setQuickBackwardState(State quickBackwardState) {
		this.quickBackwardState = quickBackwardState;
	}

	public State getStopState() {
		return stopState;
	}

	public void setStopState(State stopState) {
		this.stopState = stopState;
	}

	public State getCurrentState() {
		return currentState;
	}

	public void setCurrentState(State currentState) {
		this.currentState = currentState;
	}
}

 PlayState.java

 

package com.flyingh.state;

import com.flyingh.istate.State;
import com.flyingh.player.Player;

public class PlayState implements State {
	private Player player;

	public PlayState(Player player) {
		super();
		this.player = player;
	}

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("已经处于播放状态了!");
	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub
		System.out.println("由播放状态进入暂停状态!");
		player.setCurrentState(player.getPauseState());
	}

	@Override
	public void quickForward() {
		// TODO Auto-generated method stub
		System.out.println("由播放状态进入快进状态!");
		player.setCurrentState(player.getQuickForwardState());
	}

	@Override
	public void quickBackward() {
		// TODO Auto-generated method stub
		System.out.println("由播放状态进入快退状态!");
		player.setCurrentState(player.getQuickBackwardState());
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("由播放状态进入停止状态!");
		player.setCurrentState(player.getStopState());
	}

}

 PauseState.java

 

package com.flyingh.state;

import com.flyingh.istate.State;
import com.flyingh.player.Player;

public class PauseState implements State {
	private Player player;

	public PauseState(Player player) {
		super();
		this.player = player;
	}

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("由暂停状态进入播放状态!");
		player.setCurrentState(player.getPlayState());
	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub
		System.out.println("已经处于暂停状态!");
	}

	@Override
	public void quickForward() {
		// TODO Auto-generated method stub
		System.out.println("暂停时不能快进!");
	}

	@Override
	public void quickBackward() {
		// TODO Auto-generated method stub
		System.out.println("暂停时不能快退!");
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("由暂停状态进入停止状态!");
		player.setCurrentState(player.getStopState());
	}

}

 QuickForwardState.java

 

package com.flyingh.state;

import com.flyingh.istate.State;
import com.flyingh.player.Player;

public class QuickForwardState implements State {
	private Player player;

	public QuickForwardState(Player player) {
		super();
		this.player = player;
	}

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("由快进状态进入播放状态!");
		player.setCurrentState(player.getPlayState());
	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub
		System.out.println("快进时不能暂停!");
	}

	@Override
	public void quickForward() {
		// TODO Auto-generated method stub
		System.out.println("已经处于快进状态!");
	}

	@Override
	public void quickBackward() {
		// TODO Auto-generated method stub
		System.out.println("由快进状态进入快退状态!");
		player.setCurrentState(player.getQuickBackwardState());
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("由快进状态进入停止状态!");
		player.setCurrentState(player.getStopState());
	}

}

 QuickBackwardState.java

 

package com.flyingh.state;

import com.flyingh.istate.State;
import com.flyingh.player.Player;

public class QuickBackwardState implements State {
	private Player player;

	public QuickBackwardState(Player player) {
		super();
		this.player = player;
	}

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("由快退状态进入播放状态!");
		player.setCurrentState(player.getPlayState());
	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub
		System.out.println("快退时不能暂停!");
	}

	@Override
	public void quickForward() {
		// TODO Auto-generated method stub
		System.out.println("由快退状态进入快进状态!");
		player.setCurrentState(player.getQuickForwardState());
	}

	@Override
	public void quickBackward() {
		// TODO Auto-generated method stub
		System.out.println("已经处于快退状态!");
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("由快退状态进入停止状态!");
		player.setCurrentState(player.getStopState());
	}

}

 StopState.java

 

package com.flyingh.state;

import com.flyingh.istate.State;
import com.flyingh.player.Player;

public class StopState implements State {
	private Player player;

	public StopState(Player player) {
		super();
		this.player = player;
	}

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("由停止状态进入播放状态!");
		player.setCurrentState(player.getPlayState());
	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub
		System.out.println("停止时不能暂停!");
	}

	@Override
	public void quickForward() {
		// TODO Auto-generated method stub
		System.out.println("停止时不能快进!");
	}

	@Override
	public void quickBackward() {
		// TODO Auto-generated method stub
		System.out.println("停止时不能快退!");
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("已经处于停止状态!");
	}

}

 Client.java

 

package com.flyingh.client;

import com.flyingh.player.Player;

public class Client {
	public static void main(String[] args) {
		Player player = new Player();
		player.run();
		player.play();
		player.pause();
		player.play();
		player.quickForward();
		player.quickBackward();
		player.pause();
		player.play();
		player.stop();
		player.quickBackward();
		player.quickForward();
		player.play();
		player.quickBackward();
		player.pause();
		player.stop();
		player.exit();
	}
}

 程序运行结果如下:

 

运行播放器!
由停止状态进入播放状态!
由播放状态进入暂停状态!
由暂停状态进入播放状态!
由播放状态进入快进状态!
由快进状态进入快退状态!
快退时不能暂停!
由快退状态进入播放状态!
由播放状态进入停止状态!
停止时不能快退!
停止时不能快进!
由停止状态进入播放状态!
由播放状态进入快退状态!
快退时不能暂停!
由快退状态进入停止状态!
退出播放器!
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Stateflow教程,stateflow教程 pdf,matlab

    Stateflow是MATLAB Simulink中的一个强大工具,专门用于创建和模拟复杂的、基于事件的系统,这些系统可能涉及逻辑决策、序列行为和并行处理。本教程将深入讲解Stateflow的基本概念、如何构建状态图以及如何进行调试...

    _jki_lib_state_machine.zip_JKI_JKI state machine_JKI state架构_ope

    《JKI State Machine:一种高效的单线程字符串状态机实现》 在软件开发领域,状态机是一种常用的模型,用于描述对象或系统随时间变化的行为。JKI State Machine,源自OpenG库,是一种专为顺序结构设计的单线程字符...

    Simulink的Stateflow教程

    Stateflow是MATLAB Simulink环境中的一种强大的建模工具,用于设计、模拟和实现复杂的离散事件系统,如状态机和流程图。本教程将深入探讨Stateflow的基础知识及其在Simulink中的应用。 首先,我们需要理解Stateflow...

    详解Stateflow建模与应用实例,简单stateflow建模实例,matlab

    Stateflow是一种强大的建模工具,尤其在MATLAB环境中,它被广泛用于构建复杂逻辑系统和控制系统的模型。本文将深入探讨Stateflow的概念、其在MATLAB中的应用以及如何通过实例来学习Stateflow建模。 Stateflow是...

    stateflow 计时器

    基于simulink的计时器,方便学习stateflow,Stateflow是一个跟Simulink联合起来使用的,可视化图形界面工具。在Simulink环境下,它是用来模拟和控制一些逻辑系统. Stateflow跟Simulink是完美结合在一起的,可以建模...

    stateflow教材手把手教你-Stateflow教程.pdf

    Stateflow是一种用于建模和设计嵌入式系统、控制系统以及通信系统的编程语言,它是MATLAB中Simulink的一部分。Stateflow教程通常用于指导用户如何使用Stateflow进行状态机的设计和事件驱动的程序建模。本教程内容...

    Kubernetes部署kube-state-metrics

    Kubernetes是目前最流行的容器编排系统,而kube-state-metrics是Kubernetes生态系统中的一个关键组件,它负责收集集群状态的度量数据。本篇文章将深入探讨如何在Kubernetes上部署kube-state-metrics以及这个组件的...

    QML state状态切换实例

    在QML(Qt Quick Markup Language)中,State和StateGroup是用于管理组件不同行为和视觉状态的关键元素。它们提供了一种优雅的方式来组织和控制UI组件的属性,使得在不同的场景下,组件可以呈现出不同的外观和行为。...

    Visualstate状态机基础教程

    《Visualstate状态机基础教程》是一本专注于使用Visualstate工具进行状态机建模的教育资料,旨在提升嵌入式系统开发的效率。本教程不仅适用于初学者,也适合那些希望在建模技能上更进一步的开发者。教程内容涵盖理论...

    浅谈vuex为什么不建议在action中修改state

    在 Vuex 中,官方推荐的规范是不在 action 中直接修改 state,而应该通过 commit 触发 mutation 来进行状态变更。这种做法背后有多种原因,让我们深入理解这些原因,并结合源码来探讨其背后的机制。 首先,Vuex ...

    StateMachine 状态机机制深入解析

    StateMachine 状态机机制深入解析 StateMachine 状态机机制是指在软件开发中,使用状态机来描述和处理复杂的业务流程。状态机机制可以帮助开发者简化状态机的开发过程,并且可以提高代码的可读性和维护性。在 ...

    iar visual state 6.31

    AR Systems发布的visualState是基于UML状态机的建模工具,允许开发人员在状态机的层次上开发和调试,然后直接生成可用的C代码,尽量减少人工编码引进错误的可能。对于复杂的逻辑,如果不使用层次状态机来剖析它的...

    IAR visualSTATE中文教程PPT

    《IAR visualSTATE中文教程PPT》是一份深入解析IAR visualSTATE的教育资源,适合对嵌入式系统设计和验证感兴趣的工程师以及学习者。这份教程以其详尽的内容,为中国用户提供了方便的学习路径,帮助他们理解和掌握这...

    Power System State Estimation: Theory and Implementation

    Offering an up-to-date account of the strategies utilized in state estimation of electric power systems, this text provides a broad overview of power system operation and the role of state estimation ...

    Stateflow逻辑系统建模.rar

    《Stateflow逻辑系统建模》是一份深入探讨Simulink中的Stateflow技术的资料,它在控制工程、软件工程和系统模拟等领域具有广泛的应用。Stateflow是一种强大的图形化建模工具,它允许用户以直观的方式表示复杂的离散...

    flink-queryable-state-client-java-1.10.0-API文档-中文版.zip

    赠送jar包:flink-queryable-state-client-java-1.10.0.jar; 赠送原API文档:flink-queryable-state-client-java-1.10.0-javadoc.jar; 赠送源代码:flink-queryable-state-client-java-1.10.0-sources.jar; 赠送...

    基于Simulink Stateflow的纯电动汽车整车上下电策略.pdf

    Simulink和Stateflow是MathWorks公司推出的一款用于系统级建模与仿真的软件工具,广泛应用于工程和技术领域的计算机辅助设计。Simulink提供了一种可视化编程环境,用户可以通过拖放的方式快速构建动态系统的模型;...

    Stateflow教程_stateflowsimulink_stateflow教程_stateflow_matlabsimuli

    Stateflow是一种强大的建模工具,常用于在MATLAB Simulink环境中构建复杂的系统行为模型,尤其是涉及状态转换和逻辑决策的系统。本教程将深入探讨Stateflow的基本概念、设计原则以及如何在Simulink中有效地使用它。 ...

    Stateflow建模与应用

    StateflowStateflowStateflow StateflowStateflowStateflowStateflow 是有限状态机 有限状态机 有限状态机 (finite state machinefinite state machinefinite state machine finite state machinefinite state ...

Global site tag (gtag.js) - Google Analytics