java基础与进阶web攻城狮首页投稿(暂停使用,暂停投稿)

设计模式—状态模式

2016-06-12  本文已影响2912人  HJXANDHMR

今天我们来学习一种行为型模式,状态模式(State Pattern)。

模式定义

允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States)。

模式结构

状态模式包含如下角色:

**Context: ** 环境类
**State: ** 抽象状态类
**ConcreteState: **具体状态类

UML图

代码实现

大家都知道水是有几种状态的,我们就来模拟水状态的转变。

IWaterState.java

/**
 * 抽象状态类
 */
public interface IWaterState {

    void printState();
}

IceWaterState.java

/**
 * 冰水
 */
public class IceWaterState implements IWaterState {

    @Override
    public void printState() {
        System.out.println("Now state: Ice Water");
    }
}

WarmWaterState.java

/**
 * 温水
 */
public class WarmWaterState implements IWaterState {
    @Override
    public void printState() {
        System.out.println("Now state: Warm Water");
    }
}

BoilingWaterState.java

/**
 * 沸水
 */
public class BoilingWaterState implements IWaterState {
    @Override
    public void printState() {
        System.out.println("Now state: Boiling Water");
    }
}

WaterContext.java


/**
 * 环境类
 */
public class WaterContext {
    private IWaterState mIWaterState;

    public IWaterState getIWaterState() {
        return mIWaterState;
    }

    public void setIWaterState(int i) {
        if (i == 0) {
            mIWaterState = new IceWaterState();
            return;
        }

        if (i == 1) {
            mIWaterState = new WarmWaterState();
            return;
        }

        if (i == 2) {
            mIWaterState = new BoilingWaterState();
            return;
        }
    }
}

测试类


 public class MyClass {

    public static void main(String[] args) {
        IWaterState iWaterState;
        WaterContext waterContext = new WaterContext();
        //模拟状态改变
        for (int i = 0; i < 3; i++) {
            waterContext.setIWaterState(i);
            iWaterState = waterContext.getIWaterState();
            System.out.println("i=" + i);
            iWaterState.printState();
        }
    }
}

运行结果

模式分析

在状态模式结构中需要理解环境类与抽象状态类的作用:

状态模式的优点

状态模式的缺点

本博客同步发表在http://hjxandhmr.github.io/2016/06/12/DesignPattern-State/

参考
http://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/state.html

上一篇 下一篇

猜你喜欢

热点阅读