J2EE设计模式之State模式

设计模式,这个概念现在是满天飞,大家手里面估计都有,Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, in the book "Design Patterns - Element of Re-Useable Object-Oriented Software",这本书。根据其中的说法,有三种,创建型模式、结构型模式和行为型模式。一共包括23个模式,在这里不一一列举。实际应用中,我们不可能在短时间内消化吸收掉,因为模式本身就是约定俗成的东西,依靠大家以往的项目经验总结出来的习惯用法。习惯要时间去培养,去形成,所以大家不要急着去用所有的模式,但一定要有这种意识,在项目中、学习中开始用上几个看看,研究研究模式给你会带来什么价值。但如果,你对Java JDK1.4 源码用到的设计模式感兴趣,可以到官方网站下载!

在进入正题之前,我申明该文章没有任何商业目的,其中涉及到开源软件的一些源代码,所以涉及到知识产权问题时,如果有人将其用于商业目的,个人不负责该方面的责任。在这里只用于学习、交流的目的。谢谢合作。

但问题出来了,如何将这些模式具体用到Java Project中呢?刚开始确实很头疼。一方面,我们要知道模式的适用场合、引入模式给系统带来的好坏,等等都需要我们去考虑的。另一方面,模式本身的理解消化吸收。再者,还有你的老板逼着你完成任务-:)。等等。其实,冷静分析一下,也不是没有可能。我们在项目中,完成自己的工作是一方面,但另一方面要考虑好自己的职业生涯,要想把Java Coder、Java Developer、Java Architect、或者什么的……做好,这些都是基本功。

学者,就是喜欢把1+1,这么简单的问题用什么。。。。理论推导出来,作为技术工作者,比如我们,看的是结果,技术的实作性。而大家在学设计模式中的过程中,往往脱离实践,看看设计模式的UML图(说句实在话,大家的UML功底都不会太好吧,把它用于我们的UP估计也少。)、还有模式的什么意图,别名,动机,适用性,结构,参与者,协作,效果,实现,代码实例,。。。。。。。脑袋都晕掉了。大家是否给忘记了,这种GP,本来

就很抽象,加上这么多条条框框,两个字,“郁闷”。我们不妨从分析GP代码入手效果很很不错,我学习过程中就是这样的。要不我们现在就看看一个例子。以行为型模式State为例。(模式的实现例子网络上有很多。Java的实现也很多,比如,Together ControlCenter里面就内置了这种基于GP的编程模板,详细内容大家用用就知道了。)

大家知道,State的用意在于,允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了他的类。我们先看http://www.javacoder.net/patterns.jsp 上提供的GOF SOFTWARE DESIGN PATTERNS CATALOGUE的State模式源码实现。

首先看接口类,State.java

public interface State {
public void handle();
}

以定义接口以封装与Conext(代码稍候陈述!)的一个特定状态相关的行为。

然后看,接口的实现类。第一个,ConcreteState1.java

public class ConcreteState1 implements State {
public void handle() {
System.out.println("ConcreteState1.handle() executing");
}
}

第二个,ConcreteState2.java

public class ConcreteState2 implements State {
public void handle() {
System.out.println("ConcreteState2.handle() executing");
}
}

这两个类实现了State接口。

时间: 2025-01-21 15:34:34

J2EE设计模式之State模式的相关文章

设计模式 ( 十七) 状态模式State(对象行为型)

设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ellse语句来做状态判断来进行不同情况的处理.但是对复杂状态的判断就显得"力不从心了".随着增加新的状态或者修改一个状体(if else(或switch case)语句的增多或者修改)可能会引起很大的修改,而程序的可读性,扩展性也会变得很弱.维护也会很麻烦.那么我就考虑只修改自身状态的

乐在其中设计模式(C#) - 状态模式(State Pattern)

原文:乐在其中设计模式(C#) - 状态模式(State Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它所属的类. 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里.在对象内部可以根据用户的不同选择不同的数据持久化方案. MessageModel using

【设计模式】—— 状态模式State

模式意图 允许一个对象在内部改变它的状态,并根据不同的状态有不同的操作行为. 例如,水在固体.液体.气体是三种状态,但是展现在我们面前的确实不同的感觉.通过改变水的状态,就可以更改它的展现方式. 应用场景 1 当一个对象的行为,取决于它的状态时 2 当类结构中存在大量的分支,并且每个分支内部的动作抽象相同,可以当做一种状态来执行时. 模式结构 Context 环境角色,里面包含状态对象 class Context{ private State state; public void setStat

设计模式的解析和实现(C++)之十七-State模式

作用: 允许一个对象在其内部状态改变时改变它的行为. UML结构图: 解析: State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给了具体的状态类去负责.同时,State模式和S

设计模式学习笔记(十五)—State模式

一.State模式定义: 允许一个对象在其状态改变时,改变它的行为.看起来对象似乎修改了它的类. 二.模式解说 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给了具体的状态

Java设计模式之状态模式(State模式)介绍_java

State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式 State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了. 不只是根据状态,也有根据属性.如果某个对象的属性不同,对象的行为就不一样,这点在数据库系统中出现频率比较高,我们经常会在一个数据表的尾部,加上property属性含义的字段,用以标识记录中一些特殊

C++设计模式之状态模式_C 语言

前言 在实际开发中,我们经常会遇到这种情况:一个对象有多种状态,在每一个状态下,都会有不同的行为.那么在代码中我们经常是这样实现的. 复制代码 代码如下: typedef enum tagState {      state,      state1,      state2 }State;   void Action(State actionState) {      if (actionState == state)      {           // DoSomething     

【设计模式】—— 备忘录模式Memento

模式意图 这个模式主要是想通过一个对象来记录对象的某种状态,这样有利于在其他需要的场合进行恢复. 该模式还有跟多可以扩展的地方,比如可以记录多个时间的状态,每个角色都有可以扩展的空间,完全看业务场景而定. 应用场景 1 保存对象某一时刻的状态 2 避免直接暴露接口,破坏封装性 模式结构 Originator 是备忘录的发起者,记录状态的对象 class Originator{ private String state; public Memento ceateMemento() { return

[Head First设计模式]云南米线馆中的设计模式——模版方法模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子