Net设计模式实例之状态模式(State Pattern)(1)

简介:

一、状态模式简介(Brief Introduction

状态模式( State Pattern ),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

二、解决的问题(What To Solve

状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。
当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。

三、状态模式分析(Analysis

1、状态模式结构

 
Context 类: 维护一个 ConcreteState 子类的一个实例,这个实例定义当前的状态。
State 类: 抽象状态类,定义一个接口以封装与 Context 的一个特定状态相关的行为。
ConcreteStateA,ConcreteStateB,ConcreteStateC 类: 具体状态类,每一个子类实现一个与 Context 的一个状态相关的行为。

2、源代码

1 Context 类: 维护一个 ConcreteState 子类的一个实例,这个实例定义当前的状态
public  class Context
{
    private State  state;
 
    public State State
     {
        get  { return  state; }
        set
         {
             state = value ;
            Console .WriteLine(" 当前状态是:"  + state.GetType().Name);
         }
     }
    public  Context(State  state)
     {
        this .state = state;
        Console .WriteLine(" 初始状态是:" +state.GetType().Name);
     }
 
    public void  Request()
     {
         state.Handle(this );
     }
}
 
2 抽象状态类及其具体实现类
public  abstract class State
{
   public abstract void  Handle(Context  context);
}
 
public  class ConcreteStateA :State
{
    public override void  Handle(Context  context)
     {
         context.State = new ConcreteStateB ();
     }
}
 
public  class ConcreteStateB State
{
    public override void  Handle(Context  context)
     {
         context.State = new ConcreteStateC ();
     }
}
public  class ConcreteStateC  : State
{
    public override void  Handle(Context  context)
     {
         context.State = new ConcreteStateA ();
     }
}
 
4 、客户端代码
static  void Main (string [] args)
{
    Context  context = new Context (new ConcreteStateA ());
     context.Request();
     context.Request();
     context.Request();
    Console .Read();
}

3、程序运行结果











本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/270542,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
4月前
|
设计模式 缓存
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
|
3月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
39 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
3月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
31 1
|
3月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
39 0
|
10天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
15 1
|
4月前
|
设计模式 Java
Java设计模式:什么是观察者模式(Observer Pattern)?
Java设计模式:什么是观察者模式(Observer Pattern)?
31 0
|
4月前
|
设计模式 自然语言处理 编译器
二十三种设计模式全面解析-解释器模式(Interpreter Pattern):用代码诠释语言的魅力
二十三种设计模式全面解析-解释器模式(Interpreter Pattern):用代码诠释语言的魅力
|
4月前
|
设计模式
二十三种设计模式全面解析-职责链模式(Chain of Responsibility Pattern):解放代码责任链,提升灵活性与可维护性
二十三种设计模式全面解析-职责链模式(Chain of Responsibility Pattern):解放代码责任链,提升灵活性与可维护性
|
4月前
|
设计模式
二十三种设计模式全面解析-外观模式(Facade Pattern)详解:简化复杂系统的奇妙之道
二十三种设计模式全面解析-外观模式(Facade Pattern)详解:简化复杂系统的奇妙之道