欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式系列 - 状态模式

程序员文章站 2022-10-04 16:41:39
在状态模式中,类的行为时基于它的状态改变而改变。 介绍 状态模式属于行为型模式,通过运行对象在内部状态发生改变时改变它的行为,主要解决的问题是对象的行为严重依赖于它的状态。 类图描述 代码实现 1、定义状态上下文 2、定义行为接口 3、定义行为 4、上层调用 总结 状态模式封装了转换规则,将每种状态 ......

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

介绍

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

类图描述

设计模式系列 - 状态模式

代码实现

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();
    }
}

总结

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