定义:

“让一个对象的行为随着内部状态的改变而变化,而该对象也像是换了类一样”

应用场景:

角色AI:控制角色在不同状态下的AI行为

服务器连接状态:开始连线、连线中、断线等状态

关卡进行状态:不同关卡

using System;

using UnityEngine;

public class Context {
     State m_State = null;

public void Request(int Value) {
         m_State.Handle(Value);
     }

public void SetState(State theState) {
         Debug.Log("Context.SetState:" + theState);
         m_State = theState;
     }

}

public abstract class State {
     protected Context m_Context = null;
     public State(Context theConText) {
         m_Context = theConText;
     }
     public abstract void Handle(int Value);

}

//状态A

public class ConcreteStateA : State {
     public ConcreteStateA(Context theContext) : base(theContext) { }

public override void Handle(int Value)
     {
         Debug.Log("ConcreteStateA.Handle");
         if (Value > 10)
             m_Context.SetState(new ConcreteStateB(m_Context));
     }

}

//状态B

public class ConcreteStateB : State {
     public ConcreteStateB(Context theContext) : base(theContext) { }

public override void Handle(int Value)
     {
         Debug.Log("ConcreteStateA.Handle");
         if (Value > 20)
             m_Context.SetState(new ConcreteStateC(m_Context));
     }

}

//状态C

public class ConcreteStateC : State

{
     public ConcreteStateC(Context theContext) : base(theContext) { }

public override void Handle(int Value)
     {
         Debug.Log("ConcreteStateA.Handle");
         if (Value > 30)
             m_Context.SetState(new ConcreteStateA(m_Context));
     }

}

Context(状态拥有者)

一个具有状态属性的类,可以制定相关的接口,让外界能够得知状态的改变或通过操作让状态改变

State(状态接口类)

制定状态的接口,负责规范Context在特定状态下要表现的行为。

ConcreteState(具体状态类)

继承自State,实现Context在特定状态下该有的行为。

文章整理自书籍《设计模式与游戏完美开发》 菜升达 著

【Unity与23种设计模式】状态模式(State)的更多相关文章

  1. 24种设计模式--状态模式【State Pattern】

    现在城市发展很快,百万级人口的城市一堆一堆的,那其中有两个东西的发明在城市的发展中起到非常重要的作用:一个是汽车,一个呢是...,猜猜看,是什么?是电梯!汽车让城市可以横向扩展,电梯让城市可以纵向延伸 ...

  2. php 23种设计模式 - 备忘录模式

    备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式. 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该 ...

  3. C#设计模式——状态模式(State Pattern)

    一.概述在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为.如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构 ...

  4. 大话设计模式--状态模式 State -- C++实现实例

    1.状态模式: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就像是改变了其类. 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂, 把状态的判断逻辑转移到表示不同状态的一系列类 ...

  5. php 23种设计模式 - 解释器模式

    给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子.角色:环境角色(PlayContent):定义解释规则的全局信息.抽象解释器(Empress):定义了部 ...

  6. php 23种设计模式 - 命令模式

    命令模式 将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化.对请求排队或记录请求日志,以及支持撤销的操作. 命令模式以松散耦合主题为基础,发送消息.命令和请求,或通过一组处理程序发送 ...

  7. php 23种设计模式 - 迭代器模式

    迭代器模式 迭代器模式 (Iterator),又叫做游标(Cursor)模式.提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节. 当你需要访问一个聚合对象,而 ...

  8. 【Unity与23种设计模式】解释器模式(Interpreter)

    GoF中定义: "定义一个程序设计语言所需要的语句,并提供解释来解析(执行)该语言." 传统上,执行程序代码通常通过两种方式 第一种:编译程序 第二种:解释器 常见的使用解释器的程 ...

  9. 【Unity与23种设计模式】备忘录模式(Memento)

    GoF中定义: "在不违反封装的原则下,获取一个对象的内部状态并保留在外部,让对象可以在日后恢复到原先保留时的状态." 对于一些需要存储的数据,比如历史最高分 当与得分减分系统写入 ...

随机推荐

  1. Mac下配置Nginx负载均衡

    1.首先在Mac下安装Nginx(可参考我的另一篇随笔http://www.cnblogs.com/malcolmfeng/p/6896703.html). 2.安装Tomcat,下载后,解压,bin ...

  2. HashMap集合

    HashMap集合特点(用法与特点类似于HashSet集合): 1.无序,不允许重复(无序指元素顺序与添加顺序不一致): 2.底层数据结构是哈希表 3.HashMap内部对"键"用 ...

  3. 在附件管理模块中增加对FTP 上传和预览的支持

    在之前介绍的附件管理模块里面<Winform开发框架之通用附件管理模块>以及<Winform开发框架之附件管理应用>,介绍了附件的管理功能,通过对数据库记录的处理和文件的管理, ...

  4. 保存和恢复 Android Fragment 的状态

    经过几年在 Android 应用开发中应用 Fragment 的努力之后,我必须要说尽管Fragment的概念非常优秀,但是它也同时带来了一堆问题.当我们处理实例的状态保存时就需要特别一件一件地修护好 ...

  5. SQL构架(转)

    在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询,提示“对象名'CustomEntry' 无效.”.当带上了架构名称 ...

  6. 安卓餐厅点餐系统---针对浩然android工作室的一个小白的分析

    昨天刚把浩然android工作室的下载下来了,为了研究下点餐系统的架构,更好的完成手中的项目,便写出一个分析报告(小白的分析,忘见谅!) 本项目app主要用于餐厅无线订餐使用,功能突出餐厅的订餐需求, ...

  7. cas单点登录系统:客户端(client)详细配置

    最近一直在研究cas登录中心这一块的应用,分享一下记录的一些笔记和心得.后面会把cas-server端的配置和重构,另外还有这几天再搞nginx+cas的https反向代理配置,以及cas的证书相关的 ...

  8. Swift 了解(1)

    Apple取消了oc的指针以及其他不安全的访问的使用,舍弃的smalltalk语法,全面改为点语法,提供了类似java的命名空间 范型 重载: 首先我们了解一下Swift这门语言.Swift就像C语言 ...

  9. Chapter 5:Spectral-Subtractive Algorithms

    作者:桂. 时间:2017-05-24  10:06:39 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 书中 ...

  10. Java NIO学习笔记 NIO选择器

    Java NIO选择器 A Selector是一个Java NIO组件,可以检查一个或多个NIO通道,并确定哪些通道已准备就绪,例如读取或写入.这样一个线程可以管理多个通道,从而管理多个网络连接. 为 ...