如何分析J2EE设计模式中的State模式
这期内容当中小编将会给大家带来有关如何分析J2EE设计模式中的State模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
专注于为中小企业提供成都网站建设、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业延长免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
设计模式,这个概念现在是满天飞,大家手里面估计都有,Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, in the book "Design Patterns - Element of Re-Useable Object-Oriented Software",这本书。根据其中的说法,有三种,创建型模式、结构型模式和行为型模式。一共包括23个模式,在这里不一一列举。实际应用中,我们不可能在短时间内消化吸收掉,因为模式本身就是约定俗成的东西,依靠大家以往的项目经验总结出来的习惯用法。
我们现在就看看一个例子。以行为型模式State为例。(模式的实现例子网络上有很多。Java的实现也很多,比如,Together ControlCenter里面就内置了这种基于GP的编程模板,详细内容大家用用就知道了。)
大家知道,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接口。
然后再看,Context.java是如何将上述三个.java文件联系起来。
public class Context { public static final int STATE_ONE = 0; public static final int STATE_TWO = 1;
//大家注意,这句话很关键,该模式做手脚的地方!
private State currentState = new ConcreteState1(); public void request() { currentState.handle(); } public void changeState(int state) { switch (state) { case STATE_ONE: currentState = new ConcreteState1();//关键点 break; case STATE_TWO: currentState = new ConcreteState2();//关键点 break; } } }
这样,写好4个.java文件后,其实您已经实现了State设计模式,很有趣,对吧?就是这样简单。
再看看如何使用该设计模式了。写一个Client.java看看。
public class Client { public static void main(String[] args) { // 构造Context Context ctx = new Context(); // 唤起Context.request() ctx.request(); // 改变ctx的状态?为什么改变了呢?大家想想看。 ctx.changeState(Context.STATE_TWO); // 再次唤起Context.request(),结果大不一样。 ctx.request(); } }
上述就是小编为大家分享的如何分析J2EE设计模式中的State模式了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
分享标题:如何分析J2EE设计模式中的State模式
转载来源:http://scjbc.cn/article/jjjcso.html