`
zhangwei_david
  • 浏览: 467408 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 
阅读更多

   状态模式(State Pattern)是对象行为模式的一种;它的意图是:允许一个对象在其内部状态改变的时改变它的行为。

    主要角色有:

      context(环境),State(抽象的状态角色),ConcreteState(真实的状态角色)

 状态模式使用的场景:

  1.   一个对象的行为依赖于它所处于的状态,对象的行为必须随着其状态的改变而改变
  2. 对象在某个方法中依赖于一重或多重的条件转移语句,其中有大量的代码。状态模式把条件转移语句你的每一个分支都包装到一个独立的类中。使得这些条件转移语句能够以类的形式独立的存在和演进。

 

交通灯的状态有:红灯,黄灯和绿灯。
交通灯的状态是会改变的,所以抽象的状态有一个操作就是改变状态

 

/**
 * 状态机的接口
 * @author zhangwei_david
 * @version $Id: RedState.java, v 0.1 2015年1月12日 下午8:34:04 zhangwei_david Exp $
 */
public interface State {

    /**
     * 装填的装换
     *
     * @return
     */
    public State change();
}

 

/**
 *交通灯的状态机
 * @author zhangwei_david
 * @version $Id: ColorState.java, v 0.1 2015年1月12日 下午8:35:55 zhangwei_david Exp $
 */
public enum TrafficLightState implements State {

    RED {
        /**
         * @see com.cathy.demo.enumDemo.TrafficLightState#change()
         */
        @Override
        public State change() {
            // 红灯转换为绿灯
            return GREEN;
        }
    },
    GREEN {
        /**
         * @see com.cathy.demo.enumDemo.TrafficLightState#change()
         */
        @Override
        public State change() {
            // 绿灯转换为黄灯
            return YELLOW;
        }
    },
    YELLOW {
        /**
         * @see com.cathy.demo.enumDemo.TrafficLightState#change()
         */
        @Override
        public State change() {
            // 黄灯转换为红灯
            return RED;
        }
    };

    /**
     * @see com.cathy.demo.enumDemo.State#change()
     */
    public abstract State change();

}

 

/**
 *
 * @author zhangwei_david
 * @version $Id: Client.java, v 0.1 2015年1月12日 下午8:48:51 zhangwei_david Exp $
 */
public class Client {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        State state = TrafficLightState.GREEN;
        state = state.change();
        System.out.println(state);
        state = state.change();
        System.out.println(state);
        state = state.change();
        System.out.println(state);
        state = state.change();
        System.out.println(state);
        state = state.change();
        System.out.println(state);
    }

}
结果是:
YELLOW
RED
GREEN
YELLOW
RED

 

分享到:
评论

相关推荐

    应用示例-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 ...

    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设计模式之行为模式 责任链模式和状态模式

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

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

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

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

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

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

    研磨设计模式-part2

    第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24...

    研磨设计模式-part4

    第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24...

    研磨设计模式-part3

    第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24...

    design-pattern-java.pdf

    十一个行为型模式 状态模式-State Pattern 处理对象的多种状态及其相互转换——状态模式(一) 处理对象的多种状态及其相互转换——状态模式(二) 处理对象的多种状态及其相互转换——状态模式(三) 处理对象的...

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

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

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

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

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

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

    Java设计模式(含代码)

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

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

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

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...

    State Machine Java Pattern

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

    JAVA经典设计模式大全

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

Global site tag (gtag.js) - Google Analytics