索鸟网

  1. 首页
  2. 状态模式

状态模式


生活中大部分东西都用容易变的和不容易变的,容易变的我们叫这个东西处于某种状态。比如人睡觉时你不要吵醒他。有时候某种状态影响对象整个的外部表现:像水和冰给人感觉就不是一个东西了,这时候我们就可以用状态模式了:

public class State {

    public interface IWaterState {

        void printState();
    }

    public static class IceState implements IWaterState {

        @Override 
        public void printState() {
            System.out.println("冰,固态可砸碎");
        }
    }

    public static class WaterState implements IWaterState {
        @Override
        public void printState() {
            System.out.println("水,液态可以喝");
        }
    }

    public static class WaterContext implements IWaterState {//不同的状态用不同类的方法,环境类将其自由变换
        private IWaterState mIWaterState;

        public void setIWaterState(int i) {
            switch (i) {
                case 0:
                    mIWaterState = new IceState();
                    break;
                case 1:
                    mIWaterState = new WaterState();
                    break;
            }
        }

        @Override
        public void printState() {
            mIWaterState.printState();
        }
    }

    public static void main(String[] args) {
        WaterContext waterContext = new WaterContext();
        //模拟状态改变
        waterContext.setIWaterState(0);
        waterContext.printState();
        waterContext.setIWaterState(1);
        waterContext.printState();
    }
}
输出:
冰,固态可砸碎
水,液态可以喝 

在用状态模式的时候要区分什么是跟随状态变化的,什么不是。

觉得容易理解的话面向对象的23种设计模式点这里

来源地址:http://blog.csdn.net/wanyouzhi/article/details/78227670 版权归作者所有!

相关教程

  • 状态模式

    1.动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。 在实际开发中,经常会遇到这种情况;一个对象有多种状态,在每一个状态下,都会有
  • python状态模式

    标签: python 设计模式 引子 状态模式确实很好玩,我是说书上的例子确实很好玩,我对着电脑玩了好长时间,但是想说清楚还真不太容易,先从容易的开始吧 糖果机 糖果机操作的流程如下所示,这张图也叫状态图,它显示了糖果机的工作流程及状态流程 状态图1 其中一共有四个状态 售出糖果 糖果售罄 有25分钱 没有25分钱 操作糖果机会设计四个动作 投入25分钱 退
  • 设计模式_12:状态模式

    创建一个Hero类,有一个方法work可以根据当前实例的体力(power)和是否过于疲倦(isTired)来做出不同的反应: public class Main { public static void main(String[] args) { Hero hero = new Hero(100, false); hero.work();
  • 设计模式20-状态模式

    简介 核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。 实例 状态类 public class State { private String value;
  • 设计模式经典-状态模式

    模式动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。 在UML中可以使用状态图来描述对象状态的变化。 模式定义 状态模式(State Pa
  • java设计模式--状态模式

    状态模式:允许对象在内部状态发生改变时改变他的行为,对象看起来好像修改了它的类。 状态模式的uml图如下: 状态模式包括以下角色: Context类:环境类,包括一些内部状态。 State类—抽象状态类,state定义的一个所有的具体状态的共同接口,任何状态都能实现这个接口,这样一来状态之间可以互相转换。 ConcreteState类:具体的状态类。用于处理来自Con
  • 移动架构19_状态模式

    一、定义 当一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。又称状态对象模式,状态模式是对象的行为模式。 二、角色 环境(Context)角色   上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个定义了对象的当前状态 抽象状态(State)角色 定义一个接口,用以封装环境(Context)对象
  • PHP设计模式(十九)—状态模式 (State Pattern)

    状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States) (一)为什么需要状态模式 1,将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 2,本模式简化了发起人类。发起人不再需要管理和保存其内部状