状态模式控制设备

状态模式是一种行为型设计模式,它允许对象在内部状态发生变化时改变它的行为。在这个场景中,我们可以将自动、半自动、手动三种工作模式看做是不同的状态,根据不同的状态来执行不同的行为。

下面是使用C#状态模式来编写自动、半自动、手动功能模块程序的示例代码:

  1. 创建一个抽象状态接口,定义三种不同状态对应的方法:
public interface IState
{
    void AutoMode();
    void SemiAutoMode();
    void ManualMode();
}

 

  1. 创建三个具体状态类,实现抽象状态接口中的方法,并根据不同的状态执行不同的行为:
public class AutoState : IState
{
    public void AutoMode()
    {
        Console.WriteLine("正在执行自动操作");
    }

    public void SemiAutoMode()
    {
        Console.WriteLine("无法切换到半自动模式");
    }

    public void ManualMode()
    {
        Console.WriteLine("无法切换到手动模式");
    }
}

public class SemiAutoState : IState
{
    public void AutoMode()
    {
        Console.WriteLine("正在执行自动操作");
    }

    public void SemiAutoMode()
    {
        Console.WriteLine("正在执行半自动操作");
    }

    public void ManualMode()
    {
        Console.WriteLine("无法切换到手动模式");
    }
}

public class ManualState : IState
{
    public void AutoMode()
    {
        Console.WriteLine("无法切换到自动模式");
    }

    public void SemiAutoMode()
    {
        Console.WriteLine("无法切换到半自动模式");
    }

    public void ManualMode()
    {
        Console.WriteLine("正在执行手动操作");
    }
}

 

  1. 创建一个具体的上下文类,它包含了一个状态对象,并提供了切换状态的方法:  
    public class Context
    {
        private IState state;
    
        public Context(IState state)
        {
            this.state = state;
        }
    
        public void SetState(IState state)
        {
            this.state = state;
        }
    
        public void AutoMode()
        {
            this.state.AutoMode();
        }
    
        public void SemiAutoMode()
        {
            this.state.SemiAutoMode();
        }
    
        public void ManualMode()
        {
            this.state.ManualMode();
        }
    }

     

  1. 使用上述类来实现自动、半自动、手动功能模块程序:
  
static void Main(string[] args)
{
    // 创建上下文对象,初始状态为自动模式
    Context context = new Context(new AutoState());

    // 执行自动模式
    context.AutoMode();

    // 切换到半自动模式
    context.SetState(new SemiAutoState());
    context.SemiAutoMode();

    // 切换到手动模式
    context.SetState(new ManualState());
    context.ManualMode();
}

 

在上述示例代码中,我们通过创建不同的状态类来实现不同的功能模块,在具体的上下文类中通过切换状态对象来切换不同的工作模式。这样可以增强代码的可维护性和可扩展性,使得系统更加灵活和可靠。

posted @ 2023-04-20 19:10  elegydance  阅读(17)  评论(0编辑  收藏  举报