• 设计模式系列


    在状态模式中,类的行为时基于它的状态改变而改变。

    介绍

    状态模式属于行为型模式,通过运行对象在内部状态发生改变时改变它的行为,主要解决的问题是对象的行为严重依赖于它的状态。

    类图描述

    代码实现

    1、定义状态上下文

        public class Context
        {
            private static IState state;
    
            public void SetState(IState state) => Context.state = state;
    
            public IState GetState() => state;
        }
    

    2、定义行为接口

    public interface IState
    {
        void DoAction(Context context);
    }
    

    3、定义行为

    public class StartState : IState
    {
        public void DoAction(Context context)
        {
            Console.WriteLine("Player is in start state");
            context.SetState(this);
        }
    
        public override string ToString()
        {
            return "Start State";
        }
    }
    
    public class StopState : IState
    {
        public void DoAction(Context context)
        {
            Console.WriteLine("Player is in stop state");
            context.SetState(this);
        }
    
        public override string ToString()
        {
            return "Stop State";
        }
    }
    

    4、上层调用

    class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            IState startState = new StartState();
            startState.DoAction(context);
    
            Console.WriteLine(context.GetState().ToString());
    
            IState stopState = new StopState();
            stopState.DoAction(context);
            Console.WriteLine(context.GetState().ToString());
    
            Console.ReadKey();
        }
    }
    

    总结

    状态模式封装了转换规则,将每种状态与对应的的行为进行关联,这样可以使多个环境对象共享一个状态对象,从而减少系统中对象的个数。

  • 相关阅读:
    TCP/IP和HTTP协议代理
    HTTP与HTTPS的区别
    HTTP头HOST
    租户、租户管理员、部门管理员和开发者在APIGW中的角色
    HTTP协议扫盲(八 )响应报文之 Transfer-Encoding=chunked方式
    Java的Socket通信
    开发一个http代理服务器
    需求迭代:迭代需求矩阵
    产品功能对标
    GIT入门笔记(20)- 使用eclipse 基于 git 开发过程梳理
  • 原文地址:https://www.cnblogs.com/hippieZhou/p/10127112.html
Copyright © 2020-2023  润新知