zoukankan      html  css  js  c++  java
  • 状态模式的例子

    1,状态模式允许一个"对象"在其内部状态改变的时候改变其行为。
    2,状态模式的角色:
    抽象状态,具体状态(一般是几个,每一个状态下有不同的行为,),环境(context)角色(就是对象,什么对象的状态,一般该对象要初始化一个状态,还有改变状态,还有该状态下的行为)

    我们打篮球的时候运动员可以有正常状态,不正常状态,和超常状态,现在我们就以我们打篮球时候投篮时候的状态来举例子,

    首先我们抽象出状态,以及该状态下的行为,
    interface State{
        public void shot();
    }
    然后实现具体状态,我们这里有三个,三种状态三种行为。
    不正常
    public class NonormalState implements State{
        public void shot(){
        System.out.println("今天你投篮十中一");
    }
    }
    正常:
    public class NormalState implements State{
        public void shot(){
        System.out.println("今天你投篮十中五");
    }
    }
    超常:
    public class SuperState implements State{
        public void shot(){
        System.out.println("今天你投篮十中十");
    }
    }
    这个时候我们来一个环境,一个运动员,正常情况下是正常状态
    public class Player{
             private State state=new NormalState();
    public void setState(State state){
          this.state=state;
    }
          public void shot(){
                state.shot();//这里我感觉是创建型模式的适配器模式,对象适配器。应该就是这样,
        }
    }
    测试这个例子
    public class StateTest
    {
       public static void main(String[] args){
    Player player=new Player();
    player.shot();//正常下投篮
    player.setState(new NonormalState());
    player.shot();不正常下投篮
    player.setState(new SuperState());
    player.shot();超常下投篮
    }
    }
  • 相关阅读:
    C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法
    C# LINQ查询表达式用法对应Lambda表达式
    C# WPF 通过委托实现多窗口间的传值
    C# WPF 父控件通过使用可视化树找到子控件
    OpenCV打开摄像头闪退问题
    C#调用pyd
    微信支付(JSAPI、小程序)开发流程记录
    在安装pymysql遇到的问题
    个人理解的python的面向对象
    关于python3.4 MD5
  • 原文地址:https://www.cnblogs.com/yeagen/p/2176807.html
Copyright © 2011-2022 走看看