zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:22.状态模式(State Pattern)

    四个角色:抽象状态类(State)、具体状态类(ConcreateState)、情景类(Context)、客户端(Client) 

            抽象状态类(State):提供一个与情景类有关的State行为。

            具体状态类(ConcreateState):实现这个行为,实现一个状态。

            情景类(Context):维护一个State的实例对象,并且提供一个客户操作置换状态的接口。

            客户端(Client):直接调用情景类操作即可。

    实现思路:直接调用情景类,然后在情景类自动操作或者手动操作置换状态,并且取得不同结果。

    类图: 

    应用场景:文件提交审核入库。

    分析:文件创建,然后提交审核,审核通过再入库,入库保存完成进入下一流程。

            下面我们在控制台程序去演示一下如何使用State Pattern:

            一、抽象状态类(State)

        //抽象状态类(State)
    public abstract class State
    {
    public abstract void Submit(FileSub filesub);
    }

            二、具体状态类(ConcreateState)

        //具体状态类(ConcreateState)
    public class BeginState : State
    {
    public override void Submit(FileSub filesub)
    {
    Console.WriteLine("创建文档,提交待审核。");
    filesub.SetState(new CheckState());
    }
    }

    //具体状态类(ConcreateState)
    public class CheckState : State
    {
    public override void Submit(FileSub filesub)
    {
    Console.WriteLine("审核文档,准备入库");
    filesub.SetState(new StorageState());
    }
    }

    //具体状态类(ConcreateState)
    public class StorageState : State
    {
    public override void Submit(FileSub filesub)
    {
    Console.WriteLine("入库完成,准备结束此流程");
    filesub.SetState(new CompleteState());
    }
    }

    //具体状态类(ConcreateState)
    public class CompleteState : State
    {
    public override void Submit(FileSub filesub)
    {
    Console.WriteLine("结束此流程,准备创建下一个文件");
    filesub.SetState(new BeginState());
    }
    }

            三、情景类(Context)

        //情景类(Context)
    public class FileSub
    {
    private State state;
    public FileSub()
    {
    state = new BeginState();
    }
    public void SetState(State stateOne)
    {
    state = stateOne;
    }
    public void Submit()
    {
    state.Submit(this);
    }
    }

            四、客户端(Client)

        //客户端(Client)
    class Program
    {
    static void Main(string[] args)
    {
    FileSub file = new FileSub();
    file.Submit();
    file.Submit();
    file.Submit();
    file.Submit();
    Console.ReadLine();
    }
    }

           如需源码请点击 StatePattern.rar 下载。

  • 相关阅读:
    lsattr
    lsattr
    lsattr
    lsattr
    Java反射详细介绍
    Java反射详细介绍
    深入分析 Java 中的中文编码问题
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2291205.html
Copyright © 2011-2022 走看看