- 浏览: 275628 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1306关于一致性hash的讲解有很多,也不难理解,具体可以翻看其他 ... -
java.util.Timer源代码解读
2018-04-03 21:26 1458相关类: Timer : 创建定时任务调度的主类 ... -
jdbc的ResultSet结果集,数字类型的null取出后为0
2017-03-06 19:14 7327数据库里面的int,decimal等类型的字段值为null, ... -
Java中Thread的Interrupt与终止线程
2017-03-05 18:14 3726有时候我们会需要将正在执行的线程进行打断,可能我们会想到使 ... -
java中的Thread类的join
2017-03-05 16:43 2311join是Thread的实例方法,官方解释为:等待该线程终 ... -
Java的Thread,Runnable、Callable、Future、FutureTask、Executors,ExecutorService
2017-03-05 09:53 1288定义解释 Runnable ... -
springMVC响应json结果生成is开头的属性
2017-02-14 16:45 1086本来在开发中尽量不用以is开头的变量名的,但是因为开发中用 ... -
springMVC源码解读总结
2017-02-13 20:05 761HandlerMapping负责管理Web请求到具体的处 ... -
跳出多重for循环
2017-02-10 13:29 12191、变量标记形式,循环层级太多比较麻烦。 boolean ... -
Calender不是单例
2014-11-19 08:39 1837在我们使用Calender的时候,使用过 ... -
java中的值传递,引用传递
2014-11-19 08:14 1497无意中看到一个问题,java是值传递还是引 ... -
java设计模式-单例模式
2014-11-17 22:00 914单例模式1,饿汉模式 //饿汉式单例类 ... -
jacob操作office分享
2014-07-29 16:54 46776现在的项目中操作word文件比较多,word文件的加密解 ... -
java多线程编程记录(一)
2012-08-22 11:15 1259参考:http://hi.baidu.com/xiaolinc ... -
java之Scoket 客户端和服务器的发送与接收
2012-08-21 15:05 40130什么是socket 所谓socket通常也称 ... -
java设计模式- Factory Method(工厂方法)模式
2012-08-20 14:24 1966Factory Method定义 ... -
java设计模式- abstract Factory (抽象工厂)模式
2012-08-20 11:32 4624Abstract Factory定义 为一系列相 ... -
java设计模式-Adapter(适配器)模式
2012-08-20 09:33 1232参考:http://www.java3z.com/cw ... -
java设计模式-Visitor(访问者)模式
2012-08-17 15:46 1848visitor定义 作用于某个对象群中各 ... -
java设计模式-Mediator(中介者)模式
2012-08-17 12:44 7179Mediator中介者模式定义 Mediator ...
相关推荐
180 Java 设计模式及应用案例(第 2 版) public CellContext2(String strPhone, String name, float price){ this.strPhone = strPhone; this.name = name; this.price = price; } public int getMark(){ int mark ...
状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由...
《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...
Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...
State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对...
主要介绍了Java设计模式之状态模式(State模式)介绍,本文讲解了何时使用状态模式、如何使用状态模式等内容,需要的朋友可以参考下
主要介绍了java 设计模式之State(状态模式)的相关资料,一个类的行为基于它的状态的改变而改变。状态模式归属于行为型模式,需要的朋友可以参考下
AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) ...State ( 状态模式 ) Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )
用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...
第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24...
第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24...
第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24...
十一个行为型模式 状态模式-State Pattern 处理对象的多种状态及其相互转换——状态模式(一) 处理对象的多种状态及其相互转换——状态模式(二) 处理对象的多种状态及其相互转换——状态模式(三) 处理对象的...
java的设计模式大体上分为三大类: 2 设计模式遵循的原则有6个: 2 1. 工厂模式(Factory Method) 2 2. 抽象工厂模式(Abstract Factory) 3 3. 单例模式(Singleton) 4...20、状态模式(State) 23 21、访问者模式等
Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。
知道如何用java+有限状态机把大象塞进冰箱吗?
Java设计模式 (含有相关源码) Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能...
23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) 抽象工厂(abstract) 单例模式(singleton) 建造者模式(builder) 原型模式(prototype) 结构型模式...
在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...
附件中是java实现全部的设计模式,包含代码和工程(jbuilder工程),值得收藏. 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写...