zoukankan      html  css  js  c++  java
  • 状态模式(State Pattern)

    意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

      using System;
       using System.Collections.Generic;
     
        // State Pattern               Judith Bishop  Oct 2007
        // Simple game where the context changes the state based on user input
        // Has four states, each with 6 operations 
        
       interface IState {
         int MoveUp(Context context);
         int MoveDown(Context context);
       }
     
       // State 1
       class NormalState : IState {
         public  int MoveUp(Context context) {
           context.Counter+=2;
           return context.Counter;
         }
     
         public int MoveDown(Context context) {
             if (context.Counter < Context.limit) {
               context.State = new FastState();
               Console.Write("|| ");
             }
             context.Counter-=2;
             return context.Counter;
         }
       }
     
       // State 2
       class FastState : IState {
         public int MoveUp(Context context) {
           context.Counter+=5;
           return context.Counter;
         }
     
         public int MoveDown(Context context) {
            if (context.Counter < Context.limit) {
             context.State = new NormalState();
             Console.Write("||");
           }
           context.Counter-=5;
           return context.Counter;
         }
       }
     
       // Context
       class Context {
         public const int limit = 10;
         public IState State {get; set; }
         public int Counter = limit;
           
         public int Request(int n) {
           if (n==2)
             return State.MoveUp(this);
           else
             return State.MoveDown(this);
         }
       }
        
       static class Program {
          // The user interface
         static void Main () {
           Context context = new Context();
           context.State = new NormalState();
           Random r = new Random(37);
           for (int i = 5; i<=25; i++) {
             int command = r.Next(3);
             Console.Write(context.Request(command)+" ");
           }
           Console.WriteLine();
           Console.ReadKey();
         }
       }
        /* Output
        8 10 8 || 6 11 16 11 6 ||1 3 || 1 ||-4 || -6 -1 4 ||-1 || -3 2 7 ||2 4 
        */
      
     
     
     
  • 相关阅读:
    在linux系统中
    记录一次编译安装Pg_rman缺少依赖包的问题
    使用Patroni和HAProxy创建高可用的PostgreSQL集群
    Zabbix4.0国内下载源
    centos7部署postgresql集群高可用 patroni + etcd 之patroni篇
    centos7部署etcd集群
    docker-compose部署gitlab
    zabbix-agent主动模式和proxy
    docker-compose更新image命令
    shell脚本自动化安装pgsql10.5版本
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1809593.html
Copyright © 2011-2022 走看看