zoukankan      html  css  js  c++  java
  • 状态模式

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 namespace Club
      8 {
      9     class Program
     10     {
     11         static void Main(string[] args)
     12         {
     13             Account account = new Account("Tom", 100);
     14             Console.WriteLine("Already!");
     15             Console.WriteLine("Name:{0}", account.Owner);
     16             Console.WriteLine("Initial:{0}", account.Balance);
     17             Console.WriteLine("-----------------------------------------");
     18 
     19             account.Deposit(100);
     20             Console.WriteLine("-----------------------------------------");
     21 
     22             account.Cost(300);
     23             Console.WriteLine("-----------------------------------------");
     24 
     25             account.Deposit(1000);
     26             Console.WriteLine("-----------------------------------------");
     27 
     28             account.Cost(700);
     29             Console.WriteLine("-----------------------------------------");
     30 
     31             Console.ReadLine();
     32         }
     33     }
     34 }
     35 class Account
     36 {
     37     public ClientState State { get; set; }
     38     public string Owner { get; set; }
     39     public double Balance { get; set; }
     40 
     41     public Account(string owner, double initialAmount)
     42     {
     43         Owner = owner;
     44         Balance = initialAmount;
     45         State = new VistorState(this);
     46     }
     47 
     48     public void SetBalance(double amount)
     49     {
     50         Balance = amount;
     51     }
     52 
     53     public void Deposit(double amount)
     54     {
     55         Console.WriteLine("Now,deposit {0}.", amount);
     56         State.Deposit(amount);
     57         Console.WriteLine("ClientState turn to {0}", State);
     58     }
     59 
     60     public void Cost(double amount)
     61     {
     62         Console.WriteLine("Now,Cost {0}.", amount);
     63         State.Cost(amount);
     64         Console.WriteLine("ClientState turn to {0}", State);
     65     }
     66 }
     67 abstract class ClientState
     68 {
     69     protected Account Account;
     70     public abstract void Deposit(double amount);
     71     public abstract void Cost(double amount);
     72     public abstract void Check();
     73 }
     74 class VistorState : ClientState
     75 {
     76     public VistorState(Account account)
     77     {
     78         Account = account;
     79     }
     80 
     81     public override void Deposit(double amount)
     82     {
     83         Account.Balance += amount;
     84         Console.WriteLine("Deposit {0} to {1},surplus of account have {2} affter deposit", amount, Account.Owner, Account.Balance);
     85         Check();
     86     }
     87 
     88     public override void Cost(double amount)
     89     {
     90         double newBalance = Account.Balance - amount;
     91         Account.Balance -= amount;
     92         Console.WriteLine("Cost {0} from {1},surplus of account have {2} affter cost", amount, Account.Owner, Account.Balance);
     93         Check();
     94     }
     95     public override void Check()
     96     {
     97         if (Account.Balance > 100 && Account.Balance < 1000)
     98         {
     99             Account.State = new MemberState(Account);
    100         }
    101         else if (Account.Balance >= 1000)
    102         {
    103             Account.State = new VIPState(Account);
    104         }
    105     }
    106 }
    107 class MemberState : ClientState
    108 {
    109     public MemberState(Account account)
    110     {
    111         Account = account;
    112     }
    113 
    114     public override void Deposit(double amount)
    115     {
    116         Account.Balance += amount;
    117         Console.WriteLine("Deposit {0} to {1},surplus of account have {2} affter deposit", amount, Account.Owner, Account.Balance);
    118         Check();
    119     }
    120 
    121     public override void Cost(double amount)
    122     {
    123         double newBalance = Account.Balance - amount;
    124         Account.Balance -= amount;
    125         Console.WriteLine("Cost {0} from {1},surplus of account have {2} affter cost", amount, Account.Owner, Account.Balance);
    126         Check();
    127     }
    128     public override void Check()
    129     {
    130         if (Account.Balance > 0 && Account.Balance <= 100)
    131         {
    132             Account.State = new VistorState(Account);
    133         }
    134         else if (Account.Balance >= 1000)
    135         {
    136             Account.State = new VIPState(Account);
    137         }
    138     }
    139 }
    140 class VIPState : ClientState
    141 {
    142     public VIPState(Account account)
    143     {
    144         Account = account;
    145     }
    146 
    147     public override void Deposit(double amount)
    148     {
    149         Account.Balance += amount;
    150         Console.WriteLine("Deposit {0} to {1},surplus of account have {2} affter deposit", amount, Account.Owner, Account.Balance);
    151         Check();
    152     }
    153 
    154     public override void Cost(double amount)
    155     {
    156         double newBalance = Account.Balance - amount;
    157         Account.Balance -= amount;
    158         Console.WriteLine("Cost {0} from {1},surplus of account have {2} affter cost", amount, Account.Owner, Account.Balance);
    159         Check();
    160     }
    161     public override void Check()
    162     {
    163         if (Account.Balance > 100 && Account.Balance < 1000)
    164         {
    165             Account.State = new MemberState(Account);
    166         }
    167         else if (Account.Balance > 0 && Account.Balance <= 100)
    168         {
    169             Account.State = new VistorState(Account);
    170         }
    171     }
    172 }

  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/CHUR/p/5092650.html
Copyright © 2011-2022 走看看