状态模式

来源:互联网 发布:常用算法时间复杂度 编辑:程序博客网 时间:2024/06/08 04:11
// State pattern -- Structural example  

using System;

namespace DoFactory.GangOfFour.State.Structural
{
  
  
// MainApp test application 

  
class MainApp
  
{
    
static void Main()
    
{
      
// Setup context in a state 
      Context c = new Context(new ConcreteStateA());

      
// Issue requests, which toggles state 
      c.Request();
      c.Request();
      c.Request();
      c.Request();

      
// Wait for user 
      Console.Read();
    }

  }


  
// "State" 

  
abstract class State
  
{
    
public abstract void Handle(Context context);
  }


  
// "ConcreteStateA" 

  
class ConcreteStateA : State
  
{
    
public override void Handle(Context context)
    
{
      context.State 
= new ConcreteStateB();
    }

  }


  
// "ConcreteStateB" 

  
class ConcreteStateB : State
  
{
    
public override void Handle(Context context)
    
{
      context.State 
= new ConcreteStateA();
    }

  }


  
// "Context" 

  
class Context
  
{
    
private State state;

    
// Constructor 
    public Context(State state)
    
{
      
this.State = state;
    }


    
// Property 
    public State State
    
{
      
getreturn state; }
      
set
      

        state 
= value; 
        Console.WriteLine(
"State: " + 
          state.GetType().Name);
      }

    }


    
public void Request()
    
{
      state.Handle(
this);
    }

  }

}

 
 
原创粉丝点击