极速理解设计模式系列:22.状态模式(State Pattern)

简介:

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

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

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

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

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

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

类图: 

 

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

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

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

        一、抽象状态类(State)

 

 
  1. //抽象状态类(State) 
  2. public abstract class State 
  3.     public abstract void Submit(FileSub filesub);        

        二、具体状态类(ConcreateState)

 

 
  1. //具体状态类(ConcreateState) 
  2. public class BeginState : State 
  3.     public override void Submit(FileSub filesub) 
  4.     { 
  5.         Console.WriteLine("创建文档,提交待审核。"); 
  6.         filesub.SetState(new CheckState()); 
  7.     } 
  8.  
  9. //具体状态类(ConcreateState) 
  10. public class CheckState : State 
  11.     public override void Submit(FileSub filesub) 
  12.     { 
  13.         Console.WriteLine("审核文档,准备入库"); 
  14.         filesub.SetState(new StorageState()); 
  15.     } 
  16.  
  17. //具体状态类(ConcreateState) 
  18. public class StorageState : State 
  19.     public override void Submit(FileSub filesub) 
  20.     { 
  21.         Console.WriteLine("入库完成,准备结束此流程"); 
  22.         filesub.SetState(new CompleteState()); 
  23.     } 
  24.  
  25. //具体状态类(ConcreateState) 
  26. public class CompleteState : State 
  27.     public override void Submit(FileSub filesub) 
  28.     { 
  29.         Console.WriteLine("结束此流程,准备创建下一个文件"); 
  30.         filesub.SetState(new BeginState()); 
  31.     } 

        三、情景类(Context)

 

 
  1. //情景类(Context) 
  2. public class FileSub 
  3.     private State state; 
  4.     public FileSub() 
  5.     { 
  6.         state = new BeginState(); 
  7.     } 
  8.     public void SetState(State stateOne) 
  9.     { 
  10.         state = stateOne; 
  11.     } 
  12.     public void Submit() 
  13.     { 
  14.         state.Submit(this); 
  15.     } 

        四、客户端(Client)

 

 
  1. //客户端(Client) 
  2. class Program 
  3.     static void Main(string[] args) 
  4.     { 
  5.         FileSub file = new FileSub(); 
  6.         file.Submit(); 
  7.         file.Submit(); 
  8.         file.Submit(); 
  9.         file.Submit(); 
  10.         Console.ReadLine(); 
  11.     } 

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


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827090

相关文章
|
4月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
4月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
42 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
4月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
37 1
|
19天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
29天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1
|
1月前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
29 4
|
2月前
|
设计模式
【设计模式】状态模式
【设计模式】状态模式
|
3月前
|
设计模式 Java 测试技术
浅谈设计模式 - 状态模式(十三)
浅谈设计模式 - 状态模式(十三)
19 0
|
4月前
|
设计模式 程序员
设计模式-状态模式(State)
设计模式-状态模式(State)
40 0
|
4月前
|
设计模式 Java
聊聊Java设计模式-状态模式
状态模式(State Pattern)指允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
55 1