c#设计模式之状态模式

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类

类图如下


IState

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

State1

public class State1 : IState
    {
        public void Do(Context context)
        {
            Console.WriteLine("state1");
            context.SetState(new State2());
        }
    }

State2

public class State2 : IState
    {
        public void Do(Context context)
        {
            Console.WriteLine("state2");
            context.SetState(new State1());
        }
    }

Context

 public class Context
    {
        private IState state;
        public void SetState(IState state)
        {
            this.state = state;
        }
        public void DoSomething()
        {
            this.state.Do(this);
        }
    }

调用

static void Main(string[] args)
        {
            Context context = new Context();
            context.SetState(new State1());

            context.DoSomething();
            context.DoSomething();
        }

优点:
1.逻辑清晰,把if else 拆分到State类中

  1. 方便扩展

缺点:
1.如果状态过多,增加状态类的数量,增加程序复杂性

  1. 由于逻辑拆分到状态类中,程序不太易于阅读
  2. 对于”开闭原则“支持不友好。当增加状态类时需要修改已有状态类中状态类转换的代码。

源代码地址: 点击我下载 提取码: hhpc

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容