- 浏览: 18301 次
- 性别:
- 来自: 西安
最新评论
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(); } }
程序运行结果如下:
运行播放器! 由停止状态进入播放状态! 由播放状态进入暂停状态! 由暂停状态进入播放状态! 由播放状态进入快进状态! 由快进状态进入快退状态! 快退时不能暂停! 由快退状态进入播放状态! 由播放状态进入停止状态! 停止时不能快退! 停止时不能快进! 由停止状态进入播放状态! 由播放状态进入快退状态! 快退时不能暂停! 由快退状态进入停止状态! 退出播放器!
发表评论
文章已被作者锁定,不允许评论。
-
Interpreter
2011-11-24 21:19 839Interpreter Pattern:其意图是给定一个语言, ... -
Visitor
2011-11-24 17:37 659Visitor Pattern:表示一个作用于某对象结构中的各 ... -
Mediator
2011-11-24 16:22 662Mediator Pattern: 用一 ... -
Prototype
2011-11-24 11:32 605Prototype Pattern:就是通过复制现在已经存在的 ... -
Memento
2011-11-23 21:56 685Memento Pattern:在不破坏封闭的前提下,捕获一个 ... -
Flyweight
2011-11-23 18:38 651享元模式以共享的方式高效地支持大量的细粒度对象. 1).Fl ... -
Builder
2011-11-22 16:38 763Builder Pattern:可以将一个产品的内部表象与产品 ... -
Bridge
2011-11-22 15:05 684桥梁模式的用意是"将抽象化(Abstraction) ... -
Chain Of Responsibility
2011-11-21 23:05 658Chain Of Responsibility Pattern ... -
Abstract Factory
2011-11-21 22:00 644下面以Mac和PC的CPU和RAM为例,代码如下: Cpu. ... -
Proxy
2011-11-18 18:47 660Proxy Pattern:对其他对象提供一种代理以控制对这个 ... -
Composite
2011-11-17 17:09 793Composite Pattern:意图是将对象组合成树形结构 ... -
Iterator
2011-11-16 16:56 889Iterator Pattern:其意图是提供一种方法顺序访问 ... -
Template Method
2011-11-16 11:43 659模板方法模式:在一个方法中定义一个算法的骨架,而将一些实 ... -
Facade
2011-11-15 23:00 596Facade Pattern:为子系统中的各类(或结构与方法) ... -
Adapter
2011-11-15 21:43 630Adapter Pattern:将一个类的接口,转换成客户所期 ... -
Command
2011-11-14 23:06 5721).下面以Boss和Clerk为例: Clerk.java ... -
Factory Method
2011-11-13 20:44 595Simple Factory: 以Fruit为例,以下是实现 ... -
Decorator
2011-11-12 23:09 570装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的 ... -
Observer
2011-11-12 21:30 600观 察 者 模 式 定义了对象之间的一对多依赖,这样一来 ...
相关推荐
Stateflow是MATLAB Simulink中的一个强大工具,专门用于创建和模拟复杂的、基于事件的系统,这些系统可能涉及逻辑决策、序列行为和并行处理。本教程将深入讲解Stateflow的基本概念、如何构建状态图以及如何进行调试...
《JKI State Machine:一种高效的单线程字符串状态机实现》 在软件开发领域,状态机是一种常用的模型,用于描述对象或系统随时间变化的行为。JKI State Machine,源自OpenG库,是一种专为顺序结构设计的单线程字符...
Stateflow是MATLAB Simulink环境中的一种强大的建模工具,用于设计、模拟和实现复杂的离散事件系统,如状态机和流程图。本教程将深入探讨Stateflow的基础知识及其在Simulink中的应用。 首先,我们需要理解Stateflow...
Stateflow是一种强大的建模工具,尤其在MATLAB环境中,它被广泛用于构建复杂逻辑系统和控制系统的模型。本文将深入探讨Stateflow的概念、其在MATLAB中的应用以及如何通过实例来学习Stateflow建模。 Stateflow是...
基于simulink的计时器,方便学习stateflow,Stateflow是一个跟Simulink联合起来使用的,可视化图形界面工具。在Simulink环境下,它是用来模拟和控制一些逻辑系统. Stateflow跟Simulink是完美结合在一起的,可以建模...
Stateflow是一种用于建模和设计嵌入式系统、控制系统以及通信系统的编程语言,它是MATLAB中Simulink的一部分。Stateflow教程通常用于指导用户如何使用Stateflow进行状态机的设计和事件驱动的程序建模。本教程内容...
Kubernetes是目前最流行的容器编排系统,而kube-state-metrics是Kubernetes生态系统中的一个关键组件,它负责收集集群状态的度量数据。本篇文章将深入探讨如何在Kubernetes上部署kube-state-metrics以及这个组件的...
在QML(Qt Quick Markup Language)中,State和StateGroup是用于管理组件不同行为和视觉状态的关键元素。它们提供了一种优雅的方式来组织和控制UI组件的属性,使得在不同的场景下,组件可以呈现出不同的外观和行为。...
《Visualstate状态机基础教程》是一本专注于使用Visualstate工具进行状态机建模的教育资料,旨在提升嵌入式系统开发的效率。本教程不仅适用于初学者,也适合那些希望在建模技能上更进一步的开发者。教程内容涵盖理论...
在 Vuex 中,官方推荐的规范是不在 action 中直接修改 state,而应该通过 commit 触发 mutation 来进行状态变更。这种做法背后有多种原因,让我们深入理解这些原因,并结合源码来探讨其背后的机制。 首先,Vuex ...
StateMachine 状态机机制深入解析 StateMachine 状态机机制是指在软件开发中,使用状态机来描述和处理复杂的业务流程。状态机机制可以帮助开发者简化状态机的开发过程,并且可以提高代码的可读性和维护性。在 ...
AR Systems发布的visualState是基于UML状态机的建模工具,允许开发人员在状态机的层次上开发和调试,然后直接生成可用的C代码,尽量减少人工编码引进错误的可能。对于复杂的逻辑,如果不使用层次状态机来剖析它的...
《IAR visualSTATE中文教程PPT》是一份深入解析IAR visualSTATE的教育资源,适合对嵌入式系统设计和验证感兴趣的工程师以及学习者。这份教程以其详尽的内容,为中国用户提供了方便的学习路径,帮助他们理解和掌握这...
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逻辑系统建模》是一份深入探讨Simulink中的Stateflow技术的资料,它在控制工程、软件工程和系统模拟等领域具有广泛的应用。Stateflow是一种强大的图形化建模工具,它允许用户以直观的方式表示复杂的离散...
赠送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是MathWorks公司推出的一款用于系统级建模与仿真的软件工具,广泛应用于工程和技术领域的计算机辅助设计。Simulink提供了一种可视化编程环境,用户可以通过拖放的方式快速构建动态系统的模型;...
Stateflow是一种强大的建模工具,常用于在MATLAB Simulink环境中构建复杂的系统行为模型,尤其是涉及状态转换和逻辑决策的系统。本教程将深入探讨Stateflow的基本概念、设计原则以及如何在Simulink中有效地使用它。 ...
StateflowStateflowStateflow StateflowStateflowStateflowStateflow 是有限状态机 有限状态机 有限状态机 (finite state machinefinite state machinefinite state machine finite state machinefinite state ...