`
androidssh
  • 浏览: 111874 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java设计模式之State(状态模式)

阅读更多

定义: GOF《设计模式》中给状态模式下的定义为:允许一个对象在其内部状态改变时改变它的行为。

 

先看一个例子:

 

  1. package com.state;  
  2. public class KissingPrincess {  
  3.     // 标志位,标志是青蛙还是王子。  
  4.     private boolean isFrog = true;  
  5.     // 根据isFrog进行不同的操作。  
  6.     public void greet() {  
  7.         if (isFrog)  
  8.             System.out.println("frog!");  
  9.         else  
  10.             System.out.println("prince!");  
  11.     }  
  12.     // 将isFrog设置成false。  
  13.     public void kiss() {  
  14.         isFrog = false;  
  15.     }  
  16.       
  17.     // 主函数。  
  18.     public static void main(String[] args) {  
  19.         KissingPrincess prince = new KissingPrincess();  
  20.         prince.greet();  
  21.         prince.kiss();  
  22.         prince.greet();  
  23.     }  
  24. }  

 

输出结果:

frog!
prince!

 

这个例子中,用了一个变量isFrog来标识是青蛙还是王子,如果是王子的话,输出"prince!",是青蛙的话,输出:“frog!”。

本例中的写法,用个朋友的话来说,只是“入门级程序员的写法”。在java中,要时时注意OOP(Object Oriented Programming)的概念。

如果状态很多的话,就会使用很多if else 语句,不仅繁琐难于维护,而且没有体现出面向对象编程的思想。

 

对上例应用状态模式后,可以变成如下的代码:

 

  1. package com.state;  
  2. public class KissingPrincess2 {  
  3.       
  4.     private State state = new Frog();  
  5.       
  6.     private interface State {  
  7.         void response();  
  8.     }  
  9.       
  10.     private class Frog implements State {  
  11.           
  12.         @Override  
  13.         public void response() {  
  14.             System.out.println("frog!");  
  15.         }  
  16.     }  
  17.       
  18.     private class Prince implements State {  
  19.           
  20.         @Override  
  21.         public void response() {  
  22.             System.out.println("prince!");  
  23.         }  
  24.     }  
  25.       
  26.     public void greet() {  
  27.         state.response();  
  28.     }  
  29.       
  30.     public void change(State state) {  
  31.         this.state = state;  
  32.     }  
  33.       
  34.     public static void main(String[] args) {  
  35.         KissingPrincess2 prince2 = new KissingPrincess2();  
  36.         prince2.greet();  
  37.         prince2.change(prince2.new Prince());  
  38.         prince2.greet();  
  39.     }  
  40. }  

 

 

输出结果:

frog!
prince!

 

上述例子就是state模式的基本思想,希望读者朋友们认真体会。

 

这里再举个state模式的例子:

玩过cs的人都知道,cs里面有很多枪,ak47啊,m16啊,但是不管什么枪,你拿起以后,都只用扣动扳机就能够把子弹打出去。这就和我们state模式思想是一样的,不管底层怎么实现(比如上述例子中的判断是frog还是prince,然后执行不同的操作),外层的接口都不变(greet方法)。

分享到:
评论

相关推荐

    java 设计模式之State(状态模式)

    主要介绍了java 设计模式之State(状态模式)的相关资料,一个类的行为基于它的状态的改变而改变。状态模式归属于行为型模式,需要的朋友可以参考下

    JAVA设计模式之行为模式 责任链模式和状态模式

    State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对...

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

    主要介绍了Java设计模式之状态模式(State模式)介绍,本文讲解了何时使用状态模式、如何使用状态模式等内容,需要的朋友可以参考下

    33种JAVA设计模式DEMO

    状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...

    应用示例-Java设计模式及应用案例(第2版)-[共11页].pdf

    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 ...

    java设计模式教程+源代码

    AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) ...State ( 状态模式 ) Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    java的设计模式大体上分为三大类: 2 设计模式遵循的原则有6个: 2 1. 工厂模式(Factory Method) 2 2. 抽象工厂模式(Abstract Factory) 3 3. 单例模式(Singleton) 4...20、状态模式(State) 23 21、访问者模式等

    State Machine Java Pattern

    Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。Java设计模式,关于状态机。

    一个有趣的有限状态机的JAVA实现

    知道如何用java+有限状态机把大象塞进冰箱吗?

    Java设计模式(含代码)

    Java设计模式 (含有相关源码) Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能...

    23种java版设计模式源码案例.zip

    23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) 抽象工厂(abstract) 单例模式(singleton) 建造者模式(builder) 原型模式(prototype) 结构型模式...

    java 设计模式资料

    附件中是java实现全部的设计模式,包含代码和工程(jbuilder工程),值得收藏. 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写...

    JAVA经典设计模式大全

    5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的...

    设计模式文档

    5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 ...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...

    Java设计模式学习教程与案例源码.zip

    Java设计模式学习教程与案例源码.zip 设计模式 ======= [设计模式专题](http://94275.cn/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/) ### 创建型 1. [工厂方法](worthed/OriginBlog/blob/master/...

    java之23种设计模式

    设计模式之Java实现源码,其中包含三大类,23种,分别为创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. ...

    Java Bug模式详解

    22.1.8 使用Singleton设计模式帮助最小化instanceof的使用 22.2 将引入bug的可能降至最 低 22.2.1 提取通用代码 22.2.2 尽可能实现纯 功能性方法 22.2.3 在构造函数中 初始化所有字段 22.2.4 出现异常情况 ...

Global site tag (gtag.js) - Google Analytics