- 浏览: 198536 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
yixinhu:
你好 能加下你的QQ么 我怎么打出来的exe点击都没反应啊.. ...
java 生成exe 文件 -
chenxiang105:
如果不需要flash 只需要做图片的翻页效果 这个是否也合适类 ...
jQuery插件page peel AD实现动态卷页、翻页或卷角flash广告效果 -
tuoxie007:
幸苦,好文章!
jetspeed门户项目组介绍 -
bobo:
需要考虑不同浏览器的兼容性
通过网页访问本地资源程序 -
tag13346:
说得这么玄,看下
时空趋势理论 --- 超越时空的均线技术(转载 )
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
1。状态模式允许一个对象基于内部状态而拥有不同的行为。
2。和程序状态机(PSM)不同,状态模式用类代表状态。
3。Context会将行为委托给当前状态对象。
4。通过每个状态封装进一个类,我们把以后需要做的任何改变局部化。
5。状态模式和策略模式有相同的类图,但是他们的意图不同。
6。策略模式通常会用行为或算法来配置Context类。
7。状态模式允许Context随着状态的改变而改变行为。
8。状态转换可以由State类或者Context类控制。
9。使用状态模式通常会导致设计中类的数目大量增加。
10。状态类可以被多个Context实例共享。
package pattern;
import java.util.Random;
public class GumBallMachineTestDrive {
public static void main(String[] args) {
GumballMachine gumballMachine = new GumballMachine(5);
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.ejectQuarter();
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
System.out.println(gumballMachine);
}
}
interface State {
public void insertQuarter();
public void ejectQuarter();
public void turnCrank();
public void dispense();
public void refill(int count);
}
class NoQuarterState implements State {
GumballMachine gumballMachine;
public NoQuarterState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("You inserted a quarter");
gumballMachine.setState(this.gumballMachine.getHasQuarterState());
}
public void ejectQuarter() {
System.out.println("You haven't inserted a quarter");
}
public void turnCrank() {
System.out.println("You need to pay first");
}
public void dispense() {
System.out.println("You need to pay first");
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class HasQuarterState implements State {
Random randomWinner = new Random(System.currentTimeMillis());
GumballMachine gumballMachine;
public HasQuarterState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("You can't insert another quarter");
}
public void ejectQuarter() {
System.out.println("Quarter returned");
this.gumballMachine.setState(this.gumballMachine.getNoQuarterState());
}
public void turnCrank() {
System.out.println("You turned...");
int winner = randomWinner.nextInt(3);
if ((winner == 0) && this.gumballMachine.getCount() > 1) {
System.out.println("winner=" + winner + " count="
+ this.gumballMachine.getCount());
this.gumballMachine.setState(this.gumballMachine.getWinnerState());
} else {
this.gumballMachine.setState(this.gumballMachine.getSoldState());
}
}
public void dispense() {
System.out.println("No gumball dispensed");
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class SoldOutState implements State {
GumballMachine gumballMachine;
public SoldOutState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
refill(5);
}
public void ejectQuarter() {
System.out.println("There are no a quarter");
}
public void turnCrank() {
refill(5);
}
public void dispense() {
refill(5);
}
public void refill(int count) {
System.out.println("refill 5 count");
this.gumballMachine.setCount(count);
this.gumballMachine.setState(this.gumballMachine.getHasQuarterState());
}
}
class SoldState implements State {
GumballMachine gumballMachine;
public SoldState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("Please wait ,we're already giving you a gumball");
}
public void ejectQuarter() {
System.out.println("Sorry ,you already turned the crank");
}
public void turnCrank() {
System.out.println("Turning twice doesn't get you another gumball!");
}
public void dispense() {
this.gumballMachine.releaseBall();
if (this.gumballMachine.getCount() > 0) {
this.gumballMachine.setState(this.gumballMachine
.getNoQuarterState());
} else {
System.out.println("Oops, out of gumballs");
this.gumballMachine.setState(this.gumballMachine.getSoldOutState());
}
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class WinnerState implements State {
GumballMachine gumballMachine;
public WinnerState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("Please wait ,we're already giving you a gumball");
}
public void ejectQuarter() {
System.out.println("Sorry ,you already turned the crank");
}
public void turnCrank() {
System.out.println("Turning twice doesn't get you another gumball!");
}
public void dispense() {
System.out
.println("YOU'RE A WINNER! You get two gumballs for your quarter");
this.gumballMachine.releaseBall();
if (this.gumballMachine.getCount() == 0) {
this.gumballMachine.setState(this.gumballMachine.getSoldOutState());
} else {
this.gumballMachine.releaseBall();
if (this.gumballMachine.getCount() > 0) {
this.gumballMachine.setState(this.gumballMachine
.getNoQuarterState());
} else {
System.out.println("Oops, out of gumballs");
this.gumballMachine.setState(this.gumballMachine
.getSoldOutState());
}
}
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class GumballMachine {
State soldOutState;
State noQuarterState;
State hasQuarterState;
State soldState;
State state;
State winnerState;
int count = 0;
public GumballMachine(int numberGumballs) {
soldOutState = new SoldOutState(this);
noQuarterState = new NoQuarterState(this);
hasQuarterState = new HasQuarterState(this);
soldState = new SoldState(this);
winnerState = new WinnerState(this);
this.count = numberGumballs;
if (numberGumballs > 0) {
state = noQuarterState;
}
}
public void insertQuarter() {
state.insertQuarter();
}
public void ejectQuarter() {
state.ejectQuarter();
}
public void turnCrank() {
state.turnCrank();
state.dispense();
}
void setState(State state) {
this.state = state;
}
public String toString() {
System.out.println(this.getState());
return this.getState().toString();
}
void releaseBall() {
System.out.println("A gumball come rolling out the slot ...");
if (count != 0) {
count = count - 1;
}
}
public State getSoldOutState() {
return soldOutState;
}
public void setSoldOutState(State soldOutState) {
this.soldOutState = soldOutState;
}
public State getNoQuarterState() {
return noQuarterState;
}
public void setNoQuarterState(State noQuarterState) {
this.noQuarterState = noQuarterState;
}
public State getHasQuarterState() {
return hasQuarterState;
}
public void setHasQuarterState(State hasQuarterState) {
this.hasQuarterState = hasQuarterState;
}
public State getSoldState() {
return soldState;
}
public void setSoldState(State soldState) {
this.soldState = soldState;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public State getState() {
return state;
}
public State getWinnerState() {
return winnerState;
}
public void setWinnerState(State winnerState) {
this.winnerState = winnerState;
}
}
发表评论
-
Iterator patten 读书笔记
2008-04-10 18:07 1033提供 一种方法 顺序访问 一个聚和 对象中的各个元素,而又不暴 ... -
模版模式 读书笔记
2008-04-10 18:04 1710在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版 ... -
Facade patten 读书笔记
2008-04-10 18:03 959提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一 ... -
Adapter patten 读书笔记
2008-04-10 18:01 927将一个类的接口,转换成客户期待的另一个接口。适配器让原本接口不 ... -
command patten 读书笔记
2008-04-10 17:56 8731 。命令模式将发出请求的对象和执行请求的对象解耦。 2。在被 ... -
单例模式 读书笔记
2008-04-07 18:44 884确保一个类只有一个实 ... -
抽象工厂模式读书笔记
2008-04-07 18:39 949提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具 ... -
工厂方法 读书笔记
2008-04-03 14:27 1107工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要 ... -
装饰者模式 读书笔记
2008-04-03 14:25 2106package pattern; public clas ... -
观察者模式(读书笔记)
2008-04-01 18:33 1078观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状 ... -
Head First Design Patterns 读后感3-策略模式
2008-04-01 18:32 1305策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换, ... -
Head First Design Patterns 读后感2 设计原则
2008-03-31 13:47 11341。软件开发中唯一一个不变的是 变化。大千世界,千奇百怪,行行 ... -
Head First Design Patterns 读后感1
2008-03-31 13:46 1387如何让大脑把记得更深刻 1。慢点,你理解的越多,记得月少 2。 ... -
proxy state 读书笔记
2008-03-28 18:35 1668定义:为另一个对象提供一个替身或者战位符以范围这个对象。 要点 ... -
阅读不懂,图书之过——《大话设计模式》创作历程 (转载)
2008-03-28 11:41 1091写这本书的确是个意外,因为在之前,我和所有的做技术的朋友一样, ... -
组合模式 读书笔记
2008-03-24 15:12 1260允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能 ...
相关推荐
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
基于state pattern实现的xml解释器
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
状态模式-State Pattern状态模式-State Pattern【学习难度:,使用频率:】状态模式-State Pattern处理对象的多种状态及其相互
StatePattern.unitypackage是一个unity演示的状态模式。有需要的同学可以自行下载。
Head First 设计模式 (十) 状态模式(State pattern) C++实现
协程库state threads library(以下简称st)是一个基于setjmp/longjmp实现的C语言版用户线程库或协程库(user level thread)。 本文详细说明了协程库的特点及工作原理,结合代码很容易理解。 srs流媒体服务器就是基于...
状态模式定义Allow an object to alter its behavior when its internal state changes. The
该PDF是我在学习state pattern时所做的笔记。里面包括了state pattern 的定义、何时使用、是否使用及实例四个部分,实例部分写的比较细,看完这个实例,相信大家也就知道怎么在自己的项目中应用state pattern了。这...
statepattern-JAVASCRIPT
Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...
设计模式中状态模式的例子代码,并包含函数模板模式;设计模式研究学习
NULL 博文链接:https://zhangyan19870108.iteye.com/blog/1992409
Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。
用state模式和observer模式一些模式QQ在线状态 com.designpattern.state_observer.rar
基于simulink的计时器,方便学习stateflow,Stateflow是一个跟Simulink联合起来使用的,可视化图形界面工具。在Simulink环境下,它是用来模拟和控制一些逻辑系统. Stateflow跟Simulink是完美结合在一起的,可以建模...
source code for state pattern. Realisation on Java.
Spring State machine API。 Spring State machine 开发文档。
stateflow教材手把手教你-Stateflow教程.pdf Stateflow教程.pdf 很不错,对新手
a paper "Reconciling Exhaustive Pattern Matching with Objects" accepted in pldi2013