• 状态模式


      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 }

  • 相关阅读:
    产品微谈
    SVN回滚机制
    super究竟是个啥?
    PM12条
    CocoaPods初体验
    UIView局部点击
    Memory cycles about Block
    About "self"
    openfire学习(一)
    WPF菜单和布局(2)
  • 原文地址:https://www.cnblogs.com/CHUR/p/5092650.html
Copyright © 2020-2023  润新知