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

简介:

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

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

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

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

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

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

类图: 

 

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

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

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

        一、抽象状态类(State)

 


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

        二、具体状态类(ConcreateState)

 


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

        三、情景类(Context)

 


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

        四、客户端(Client)

 


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

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


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

相关文章
|
12月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1234 157
|
设计模式 网络协议 Java
【设计模式】【行为型模式】状态模式(State)
一、入门 什么是状态模式? 状态模式(State Pattern)是一种行为设计模式,允许对象在其内部状态改变时改变其行为,使其看起来像是改变了类。状态模式的核心思想是将对象的状态封装成独立的类,并将
549 16
|
设计模式 Java Go
【再谈设计模式】状态模式~对象行为的状态驱动者
状态模式属于行为型设计模式。它将对象的行为封装在不同的状态类中,使得对象在不同的状态下表现出不同的行为。上下文(Context):这是一个包含状态对象的类,它定义了客户感兴趣的接口,并维护一个具体状态对象的引用。上下文将操作委托给当前的状态对象来处理。抽象状态(State):这是一个抽象类或者接口,它定义了一个特定状态下的行为接口。所有具体的状态类都实现这个接口。具体状态(Concrete State):这些是实现抽象状态接口的类,每个具体状态类实现了与该状态相关的行为。
814 18
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
设计模式 Java 测试技术
Java设计模式-状态模式(18)
Java设计模式-状态模式(18)
333 0
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
461 16
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
484 0

热门文章

最新文章