C# 状态模式
发布日期:2021-05-07 21:45:10 浏览次数:17 分类:精选文章

本文共 1515 字,大约阅读时间需要 5 分钟。

using UnityEngine;using System.Collections;public class TestLight : MonoBehaviour{    private Light lights = null;    void Start()    {        // 初始化电灯,原始状态为关        lights = new Light(new Off());        // 第一次按下开关,打开电灯        lights.PressSwich();        // 第二次按下开关,关闭电灯        lights.PressSwich();        //解析:第一次 Light类 默认用 Off类 去传值        //这就让 Light类的 state 为 Off类 实例化的        //在调用时,只会调用  Off类 中的重写方法 PressSwich        //这里将 Light类 传递过去,只是为了让 Off类 里面也可以调用 Light类 其他的方法,        //也可以转换其他的状态,在这里只是在里面做了一下状态转换,其实它的功能远不止如此        //第2次调用PressSwich方法时,这时Light类状态state 已经被 On类 赋值,        //所以调用了On类 的PressSwich方法,这时就打印了灯关了    }}/// /// 电灯类,对应模式中的Context类/// public class Light{    private LightState state;    public Light(LightState state)    {        this.state = state;    }    ///     /// 按下电灯开关    ///     public void PressSwich()    {        state.PressSwich(this);    }    public LightState State    {        get { return state; }        set { state = value; }    }}/// /// 抽象的电灯状态类,相当于State类/// public abstract class LightState{    public abstract void PressSwich(Light light);}/// /// 具体状态类, 开/// public class On : LightState{    ///     /// 在开状态下,按下开关则切换到关的状态。    ///     ///     public override void PressSwich(Light light)    {        Debug.Log("关闭开关");        light.State = new Off();    }}/// /// 具体状态类,关/// public class Off : LightState{    ///     /// 在关状态下,按下开关则打开电灯。    ///     ///     public override void PressSwich(Light light)    {        Debug.Log("打开开关");        light.State = new On();    }}

 

上一篇:C# 工厂模式
下一篇:C# 桥接模式

发表评论

最新留言

不错!
[***.144.177.141]2025年03月24日 10时39分09秒