您的位置:首页 > 其它

状态者模式

2016-01-03 20:50 141 查看
uml类图


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 }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: