zoukankan      html  css  js  c++  java
  • 状态模式(State)

    状态模式(State)

    核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。看图:

     

    State类是个状态类,Context类可以实现切换,我们来看看代码:

     

    [java] view plaincopy
    package com.xtfggef.dp.state;

    /**
    * 状态类的核心类
    * 2012-12-1
    * @author erqing
    *
    */
    public class State {

    private String value;

    public String getValue() {
    return value;
    }

    public void setValue(String value) {
    this.value = value;
    }

    public void method1(){
    System.out.println("execute the first opt!");
    }

    public void method2(){
    System.out.println("execute the second opt!");
    }
    }
    [java] view plaincopy
    package com.xtfggef.dp.state;

    /**
    * 状态模式的切换类 2012-12-1
    * @author erqing
    *
    */
    public class Context {

    private State state;

    public Context(State state) {
    this.state = state;
    }

    public State getState() {
    return state;
    }

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

    public void method() {
    if (state.getValue().equals("state1")) {
    state.method1();
    } else if (state.getValue().equals("state2")) {
    state.method2();
    }
    }
    }
    测试类:

     

    [java] view plaincopy
    public class Test {

    public static void main(String[] args) {

    State state = new State();
    Context context = new Context(state);

    //设置第一种状态
    state.setValue("state1");
    context.method();

    //设置第二种状态
    state.setValue("state2");
    context.method();
    }
    }
    输出:

    execute the first opt!
    execute the second opt!

    根据这个特性,状态模式在日常开发中用的挺多的,尤其是做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等。

  • 相关阅读:
    转:python时间日期处理小结
    vi 的一些常用操作-君子善假于物也
    没有了老师,该如何学习?
    git常用命令
    python 读配置文件
    Python中unittest用法实例
    python 单元测试unnitest-摘录自http://www.cnblogs.com/hackerain/p/3682019.html#undefined
    纯CSS实现立方体旋转
    CSS 3动画
    CSS 2D转换
  • 原文地址:https://www.cnblogs.com/juniorjava/p/7874557.html
Copyright © 2011-2022 走看看