C# 设计模式 行为型模式 之 状态模式

在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

生活实例:打篮球的时候运动员可以有正常状态、不正常状态和超常状态

优点: 1、封装了转换规则。 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 4、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。 5、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

下面通过 示例 演示下 状态模式:


namespace 状态模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            StartState startState = new StartState();
            startState.doAction(context);
            Console.WriteLine(context.getState().ToString());
            /*
             * 控制台:
             * 启动状态
                Start State
             */
        }
    }
    public interface State
    {
        public void doAction(Context context);
    }
    public class StartState : State
    {
        public void doAction(Context context)
        {
            Console.WriteLine("启动状态");
            context.setState(this);
        }
        public override string ToString()
        {
            return "Start State";
        }
    }
    public class StopState : State
    {
        public void doAction(Context context)
        {
            Console.WriteLine("停止状态");
            context.setState(this);
        }
        public override string ToString()
        {
            return "Stop State";
        }
    }

    public class Context
    {
        private State state;

        public Context()
        {
            state = null;
        }

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

        public State getState()
        {
            return state;
        }
    }
}

缺点: 1、状态模式的使用必然会增加系统类和对象的个数。 2、状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。 3、状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式是一种被广泛应用于软件开发中的最佳实践方法,用于解决常见的设计问题。在C#中,有23种经典的设计模式,它们可以分为三个主要的分类:创建模式(Creational Patterns)、结构模式(Structural Patterns)和行为模式(Behavioral Patterns)。下面是这些模式的简要介绍: 1. 创建模式: - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 建造者模式(Builder Pattern) - 原模式(Prototype Pattern) - 单例模式(Singleton Pattern) 2. 结构模式: - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为模式: - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 这些设计模式提供了一种通用的思路和结构,可以帮助开发人员更好地组织和设计他们的代码。具体的实现细节和用法可以根据具体的需求进行深入学习和研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值