- 浏览: 278635 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
typ0520:
推荐一个socket编程的异步socket类库,https:/ ...
java之Scoket 客户端和服务器的发送与接收 -
GGGGeek:
处理excel的时候,列太多,已经把pdf设置横向,依然不行, ...
jacob操作office分享 -
men4661273:
小白马 写道能不能发一下源代码啊https://git.osc ...
android自定义popupwindow仿微信 -
贝塔ZQ:
不错不错,总结的挺好的。插件实现也是不错的,PageOffi ...
jacob操作office分享 -
小白马:
能不能发一下源代码啊
android自定义popupwindow仿微信
state定义
不同的状态,不同的行为;或者说,每个状态有着相应的行为.
就像电风扇的开关,一档的上一个是关闭,关闭的上一个是五档,五档的上一个是四档,以此类推,而且五档的下一个是关闭,关闭的下一个是一档。那么在实际应用中,我们可能会这样做:
在上一档的方法中:
在下一档的方法中:
单一方向的切换还好点,双方向的切换就可以考虑使用state模式了
假设现在有一个开关,控制三种颜色的切换,blue,green,red,蓝色下一个绿色,绿色下一个红色,红色下一个是蓝色,也可以倒过来
代码如下:
缺点也显而易见了,如果状态太多了,对应的状态类也会比较多的。。
嗯,谢谢指出,确实要用单例,否则会出来多少对象,
可以的呀,方法里面做任何操作都可以的,比如电风扇的上一档的时候,执行一个操作,使风速变小,下一档的时候,使风速大,空挡的时候停止
不同的状态,不同的行为;或者说,每个状态有着相应的行为.
就像电风扇的开关,一档的上一个是关闭,关闭的上一个是五档,五档的上一个是四档,以此类推,而且五档的下一个是关闭,关闭的下一个是一档。那么在实际应用中,我们可能会这样做:
在上一档的方法中:
if(level == 5){ level = 4; do something(); }else if(level == 4){ level = 3; do something(); } else if (level == 3){ level == 2; do something(); }
在下一档的方法中:
if(level == 1){ level = 2; do something(); }else if(level == 2){ level = 3; do something(); } else if (level == 3){ level == 4; do something(); }
单一方向的切换还好点,双方向的切换就可以考虑使用state模式了
假设现在有一个开关,控制三种颜色的切换,blue,green,red,蓝色下一个绿色,绿色下一个红色,红色下一个是蓝色,也可以倒过来
代码如下:
package state; /* * 状态操作接口,执行上一个下一个的操作,还可以获得当前的状态 * 当然在这可以既执行别的操作,比如开关拨到某个颜色的时候,颜色对应的灯亮 */ public interface State { public void last(Context c); public void next(Context c); public String getState(); }
package state; /* * 蓝色状态类,实现的接口的方法,通过状态管理器在上一个或者下一个方法中 * 设置改变后的状态 */ public class BlueState implements State { public String getState() { // TODO Auto-generated method stub return "blue"; } public void last(Context c) { c.setState(new GreenState()); } public void next(Context c) { c.setState(new RedState()); } }
package state; /* * 绿色状态类,实现的接口的方法,通过状态管理器在上一个或者下一个方法中 * 设置改变后的状态 */ public class GreenState implements State { public String getState() { return "green"; } public void last(Context c) { c.setState(new RedState()); } public void next(Context c) { c.setState(new BlueState()); } }
package state; /* * 红色状态类,实现的接口的方法,通过状态管理器在上一个或者下一个方法中 * 设置改变后的状态 */ public class RedState implements State { public String getState() { return "red"; } public void last(Context c) { c.setState(new BlueState()); } public void next(Context c) { c.setState(new GreenState()); } }
package state; /* * 状态管理器,设置初始状态,得到当前状态, * 提供了两个操作,上一个的操作方法中,调用了当前状态的last方法,将状态管理器的状态更新 * 下一个的操作方法中,调用了当前状态的next方法,将状态管理器的状态更新 */ public class Context { private State state = null; public State getState() { return state; } public void setState(State state) { this.state = state; } public void push(){ state.last(this); System.out.println(state.getState()); } public void pull(){ state.next(this); System.out.println(state.getState()); } }
package state; /* * 测试类 */ public class Test { public static void main(String[] args) throws InterruptedException { /* * 创建一个状态管理器,设置初始状态为红色, * 然后就可以执行状态管理器的last或者next方法 */ Context c = new Context(); State redsState = new RedState(); c.setState(redsState); while (true){ System.out.println("当前状态:"+c.getState().getState()); System.out.print("上一个状态: "); c.push(); Thread.currentThread().sleep(2000); } } }
缺点也显而易见了,如果状态太多了,对应的状态类也会比较多的。。
评论
6 楼
a123159521
2012-08-17
状态模式,让我想到多线程中的信号量,比哪信号量变了,[1,2,3,4,5]每一个信号量执行一个操作
5 楼
men4661273
2012-08-17
yuye_zhai 写道
在这个场景中 GreenState 这些类是不是应该用单例
嗯,谢谢指出,确实要用单例,否则会出来多少对象,
4 楼
yuye_zhai
2012-08-17
在这个场景中 GreenState 这些类是不是应该用单例
3 楼
men4661273
2012-08-17
zui4yi1 写道
状态可不可以写为一个数值??
next()的时候+1,last()的时候-1?
next()的时候+1,last()的时候-1?
可以的呀,方法里面做任何操作都可以的,比如电风扇的上一档的时候,执行一个操作,使风速变小,下一档的时候,使风速大,空挡的时候停止
2 楼
zui4yi1
2012-08-16
状态可不可以写为一个数值??
next()的时候+1,last()的时候-1?
next()的时候+1,last()的时候-1?
1 楼
解未知数
2012-08-16
坐等高手评论...
发表评论
-
一致性hash的Java实现
2018-04-07 11:57 1368关于一致性hash的讲解有很多,也不难理解,具体可以翻看其他 ... -
java.util.Timer源代码解读
2018-04-03 21:26 1536相关类: Timer : 创建定时任务调度的主类 ... -
jdbc的ResultSet结果集,数字类型的null取出后为0
2017-03-06 19:14 7420数据库里面的int,decimal等类型的字段值为null, ... -
Java中Thread的Interrupt与终止线程
2017-03-05 18:14 3767有时候我们会需要将正在执行的线程进行打断,可能我们会想到使 ... -
java中的Thread类的join
2017-03-05 16:43 2386join是Thread的实例方法,官方解释为:等待该线程终 ... -
Java的Thread,Runnable、Callable、Future、FutureTask、Executors,ExecutorService
2017-03-05 09:53 1345定义解释 Runnable ... -
springMVC响应json结果生成is开头的属性
2017-02-14 16:45 1145本来在开发中尽量不用以is开头的变量名的,但是因为开发中用 ... -
springMVC源码解读总结
2017-02-13 20:05 803HandlerMapping负责管理Web请求到具体的处 ... -
跳出多重for循环
2017-02-10 13:29 13361、变量标记形式,循环层级太多比较麻烦。 boolean ... -
Calender不是单例
2014-11-19 08:39 1925在我们使用Calender的时候,使用过 ... -
java中的值传递,引用传递
2014-11-19 08:14 1550无意中看到一个问题,java是值传递还是引 ... -
java设计模式-单例模式
2014-11-17 22:00 970单例模式1,饿汉模式 //饿汉式单例类 ... -
jacob操作office分享
2014-07-29 16:54 46978现在的项目中操作word文件比较多,word文件的加密解 ... -
java多线程编程记录(一)
2012-08-22 11:15 1336参考:http://hi.baidu.com/xiaolinc ... -
java之Scoket 客户端和服务器的发送与接收
2012-08-21 15:05 40291什么是socket 所谓socket通常也称 ... -
java设计模式- Factory Method(工厂方法)模式
2012-08-20 14:24 2019Factory Method定义 ... -
java设计模式- abstract Factory (抽象工厂)模式
2012-08-20 11:32 4678Abstract Factory定义 为一系列相 ... -
java设计模式-Adapter(适配器)模式
2012-08-20 09:33 1277参考:http://www.java3z.com/cw ... -
java设计模式-Visitor(访问者)模式
2012-08-17 15:46 1896visitor定义 作用于某个对象群中各 ... -
java设计模式-Mediator(中介者)模式
2012-08-17 12:44 7216Mediator中介者模式定义 Mediator ...
相关推荐
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在这个示例中,我们关注的是如何使用Java实现一个审批流程,特别是涉及二级审批的场景。这个压缩包文件包含了一个...
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应...
在Java设计模式中,状态模式的核心概念包括以下几个部分: 1. **状态(State)**:这是个接口或抽象类,定义了状态对象的公共行为。每个状态都对应一个特定的操作集,这些操作可能会影响对象的状态。 2. **具体...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在Java中,这种模式常用于处理对象在不同状态下的多种行为,使得代码更加灵活,易于维护和扩展。 状态模式的核心...
今天,我们将讨论两种常用的Java设计模式:状态模式和模板模式。 状态模式(State Pattern) --------------------- 状态模式是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为。状态模式将状态封装...
**Java设计模式——备忘录模式详解** 备忘录模式是一种行为设计模式,它允许对象在不破坏封装性的前提下捕获并存储其内部状态,以便稍后恢复到该状态。这种模式常用于在游戏中保存进度、撤销/重做操作、以及在复杂...
8. 状态模式(State):允许对象在其内部状态改变时改变其行为。 9. 策略模式(Strategy):定义一系列算法,并将每个算法封装起来,使它们可以相互替换。 10. 模板方法模式(Template Method):定义一个操作中的...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和可扩展性。本压缩包包含的源代码涵盖了多个经典的设计模式,接下来将对这些模式进行详细介绍。 1....
在《设计模式》实战---状态模式(State Pattern)这篇文章中,作者可能详细探讨了以下关键点: 1. **模式定义**:状态模式允许对象在内部状态改变时改变其行为,对象看起来好像修改了它的类。这通过将每个状态封装...
Java设计模式中的备忘录模式(Memento Pattern)是一种用于保存对象状态的模式,以便在未来某一时刻能够恢复到之前的状态。这种模式的核心在于在不违反对象封装性的前提下,捕获对象的内部状态并将其存储起来。备忘...
《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...
Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的标准化方法。设计模式不是具体的代码或库,而是一种通用解决方案的描述,可以应用于各种编程语言,包括Java。在这个名为"JAVA ...
Java 设计模式之 State 模式 State 模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式...
State 模式是 Java 设计模式的一种,用于解决状态切换问题。当对象的状态改变时,对象的行为也随之改变。State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:State 模式的定义是:不同的状态,...
17. **状态模式(State Pattern)**:允许对象在其内部状态改变时改变其行为,对象看起来似乎改变了它的类。 18. **访问者模式(Visitor Pattern)**:在不改变类的前提下,增加新的操作行为,使得访问者可以作用于...
Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...
状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,从而使对象看起来像改变了其类。这种模式的主要目的是将对象的状态作为独立的类来管理,从而简化了条件逻辑并提高了代码的...