状态模式(state pattern) 详解

状态模式(state pattern): 允许对象在内部状态改变时改变它的行为, 对象看起来好像修改了它的类.

建立Context类, 包含多个具体状态(concrete state)类的组合, 根据状态的不同调用具体的方法, state.handle(), 包含set\get方法改变状态.

状态接口(state interface), 包含抽象方法handle(), 具体状态类(concrete state)继承(implement)状态类(state), 实现handle()方法;

具体方法:

1. Context类, 组合多个具体状态类(concrete state), 并提供set\get方法, 调用状态的方法(handle), 改变状态.

/**
 * @time 2014年7月11日
 */
package state.pattern;  

/**
 * @author C.L.Wang
 *
 */
public class GumballMachine {  

    State soldOutState;
    State noQuarterState;
    State hasQuarterState;
    State soldState;
    State winnerState;  

    State state = soldOutState;
    int count = 0;  

    /**
     *
     */
    public GumballMachine(int numberGumballs) {
        // TODO Auto-generated constructor stub
        soldOutState = new SoldOutState(this);
        noQuarterState = new NoQuarterState(this);
        hasQuarterState = new HasQuarterState(this);
        soldState = new SoldState(this);
        winnerState = new WinnerState(this);  

        this.count = numberGumballs;
        if (numberGumballs > 0) {
            state = noQuarterState;
        }
    }  

    public void insertQuarter() {
        state.insertQuarter();
    }  

    public void ejectQuarter() {
        state.ejectQuater();
    }  

    public void turnCrank() {
        state.turnCrank();
        state.dispense();
    }  

    void setState(State state) {
        this.state = state;
    }  

    void releaseBall() {
        System.out.println("A gumball comes rolling out the slot...");
        if (count != 0)
            count --;
    }  

    int getCount() {
        return count;
    }  

    void refill(int count) {
        this.count = count;
        state = noQuarterState;
    }  

    public State getState() {
        return state;
    }  

    public State getSoldOutState() {
        return soldOutState;
    }  

    public State getNoQuarterState() {
        return noQuarterState;
    }  

    public State getHasQuarterState() {
        return hasQuarterState;
    }  

    public State getSoldState() {
        return soldState;
    }  

    public State getWinnerState() {
        return winnerState;
    }  

    public String toString() {
        StringBuffer result = new StringBuffer();
        result.append("\nMighty Gumball, Inc.");
        result.append("\nJava-enabled Standing Gumball Model #2004\n");
        result.append("Inventory: " + count + " gumball");
        if (count != 1) {
            result.append("s");
        }
        result.append("\nMachine is " + state + "\n");
        return result.toString();
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索return
, count
, 状态
, public
, state
, result详解
State模式
state pattern、logback pattern 详解、urlpattern 设置详解、android pattern详解、lockpatternview详解,以便于您获取更多的相关知识。

时间: 2024-08-29 07:29:57

状态模式(state pattern) 详解的相关文章

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

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

状态模式(state pattern) 未使用状态模式详解

状态模式可以控制状态的转换, 未使用设计模式时, 程序会非常繁杂. 具体方法: 1. 状态转换类. /** * @time 2014年7月11日 */ package state; /** * @author C.L.Wang * */ public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; fin

策略模式(Strategy Pattern) 详解

策略模式: 定义了算法族, 分别封装起来, 让它们之间可以相互替换, 此模式让算法的变化独立于使用算法的客户. 对于父类的子类族需要经常扩展新的功能, 为了使用父类比较灵活的添加子类, 把父类的行为写成接口(interface)的形式; 使用set()方法, 重新设定接口的行为. 提供行为的调用的方法(如perform), 需要调用接口(interface)的固有方法(fly & quack)即可. 代码: package strategy; public abstract class Duck

装饰者模式(Decorator Pattern) 详解

装饰者模式(Decorator Pattern):动态地将责任附加到对象上. 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案. 使用方法: 1. 首先创建组件(Component)父类, 所有类,具体组件(Concrete Component)和装饰者(Decorator)都属于这一类型, 可以进行扩展; 可以是抽象类(abstract class), 也可以是接口(interface); 代码: /** * @time 2014年5月23日 */ package decorator; /

.net设计模式实例之状态模式(State Pattern)

一.状态模式简介(Brief Introduction) 状态模式(State Pattern),当一个对象的内在状态改变时允许改变其行为,这个对象 看起来像是改变了其类. 二.解决的问题(What To Solve) 状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况.把状态 的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化. 当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可 以考虑使用状态模式了. 三.状态模式分析(Ana

工厂模式(factory pattern) 详解

工厂方法模式: 定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类. 包括: 创建者父类(creator), 包含创建对象的方法(代替new具体的对象, 通过参数创建不同的对象), 和一些基本的方法; 具体创建者(concrete creator), 继承创建者父类, 实现创建对象的方法, 不同参数可以创建不同的对象; 产品类父类(product), 包含产品的基本使用方法, 被创建者父类(creator)的基本方法使用; 具体产品(concrete

抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/detail/u012515223/7403553 具体方法: 1. 提供一个抽象工厂(abstract factory)接口(interface)类, 不同的具体工厂(concrete factory)继承此类. 代码: /** * @time 2014年5月26日 */ package factory; /** * @author C.L.W

java 桥模式(Bridge Pattern)详解_java

java 桥模式(Bridge Pattern) Bridge模式解耦,其实施的定义.它是一种结构模式.本模式涉及充当桥的接口.这座桥使具体的类独立的接口实施者类.  Bridge模式解耦,其实施的定义.它是一种结构模式. 本模式涉及充当桥的接口.这座桥使具体的类独立的接口实施者类. 这两种类型的类可以在不影响彼此被改变. 实例: interface Printer { public void print(int radius, int x, int y); }//from www.j a v

Android中mvp模式使用实例详解

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller. 在MVC里,View是可以直接访问