using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DesignMode
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var context=new Context(new ConcreteStateA());//定义一个上下文类,给上下文类一个初始的状态类
context.Request();//上下文类调用状态类的处理逻辑
context.State= new ConcreteStateB();//改变上下文类的状态类
context.Request();
}
}
public interface IState
{
void Handle();
}
public class ConcreteStateA : IState
{
public void Handle()
{
Console.WriteLine("Handle is A");
}
}
public class ConcreteStateB : IState
{
public void Handle()
{
Console.WriteLine("Handle is B");
}
}
public class Context
{
private IState _state;
public Context(IState initialState)
{
this.State = initialState;
}
public IState State
{
get { return _state; }
set { _state = value;
Console.WriteLine($"State has been set to{_state.GetType().ToString()}");
}
}
public void Request()
{
_state.Handle();
}
}
}
运行结果:
State has been set toDesignMode.ConcreteStateA
Handle is A
State has been set toDesignMode.ConcreteStateB
Handle is B
抄也抄错了,哈哈,看到这篇文章的网友还是看原文吧,见笑了
原文出处:https://blog.csdn.net/zls365365/article/details/134411170
public interface IState
{
void Handle(Context context);
}
public class ConcreteStateA : IState
{
public void Handle(Context context)
{
Console.WriteLine(“Handling in State A”);
context.State = new ConcreteStateB();
}
}
public class ConcreteStateB : IState
{
public void Handle(Context context)
{
Console.WriteLine(“Handling in State B”);
context.State = new ConcreteStateA();
}
}
var context = new Context(new ConcreteStateA());
context.Request(); // Handling in State A, State has been set to: ConcreteStateB
context.Request(); // Handling in State B, State has been set to: ConcreteStateA
注意:Context的构造函数应该写成这样
public Context(IState initialState)
{
this._state = initialState;
}
写成 this.State = initialState;会多执行一句这个代码
Console.WriteLine($“State has been set to{_state.GetType().ToString()}”);
在类的内部用_State,内的外部用State