状态模式
2015-12-31 14:38
295 查看
1.UML类图
2.核心代码
3.view on github
https://github.com/mengx8/test
2.核心代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace fd { public class Account { public AccountState State { set; get; } public string Owner { set; get; } public double Balance { set; get; } public Account(string owner, double initialAmount) { Owner = owner; Balance = initialAmount; State = new VistorState(this); } public void SetBalance(double amount) { Balance = amount; } public void Deposit(double amount) { Console.WriteLine("存入" + amount); State.Deposit(amount); } public void Shopping(double amount) { Console.WriteLine("消费" + amount); State.Shopping(amount); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace fd { public abstract class AccountState { protected Account _account; public abstract void Deposit(double amount); public abstract void Shopping(double amount); public abstract void StateCheck(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace fd { class Program { static void Main(string[] args) { Account account = new Account("白石麻衣", 666666); Console.WriteLine("开户成功。姓名==>" + account.Owner + " 初始金额==>" + account.Balance ); account.Deposit(56); Console.WriteLine("==================================="); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace fd { public class VistorState:AccountState { public VistorState(Account account) { _account = account; StateCheck(); } public override void Deposit(double amount) { _account.Balance += amount; Console.WriteLine( amount + "元,存款后的账户余额为:" + _account.Balance); StateCheck(); } public override void Shopping(double amount) { double newBalance = _account.Balance - amount; if (newBalance > 0) { _account.Balance -= amount; Console.WriteLine( amount + "元,账户余额:" + _account.Balance); } StateCheck(); } public override void StateCheck() { if (_account.Balance > 100 && _account.Balance < 1000) { _account.State = new MemberState(_account); } else if (_account.Balance > 1000) { _account.State = new VIPState(_account); } } } public class VIPState : AccountState { public VIPState(Account account) { _account = account; } public override void Deposit(double amount) { _account.Balance += amount; Console.WriteLine(amount + "元,存款后的账户余额为:" + _account.Balance); StateCheck(); } public override void Shopping(double amount) { double newBalance = _account.Balance - amount; if (newBalance > 0) { _account.Balance -= amount; Console.WriteLine(amount + "元,账户余额:" + _account.Balance); } StateCheck(); } public override void StateCheck() { if (_account.Balance > 0 && _account.Balance < 100) { _account.State = new VistorState(_account); } else if (_account.Balance > 100 && _account.Balance < 1000) { _account.State = new MemberState(_account); } } } public class MemberState : AccountState { public MemberState(Account account) { _account = account; } public override void Deposit(double amount) { _account.Balance += amount; Console.WriteLine(amount + "元,存款后的账户余额为:" + _account.Balance); StateCheck(); } public override void Shopping(double amount) { double newBalance = _account.Balance - amount; if (newBalance > 0) { _account.Balance -= amount; Console.WriteLine(amount + "元,账户余额:" + _account.Balance); } StateCheck(); } public override void StateCheck() { if (_account.Balance > 0 && _account.Balance < 100) { _account.State = new VistorState(_account); } else if (_account.Balance > 1000) { _account.State = new VIPState(_account); } } } }
3.view on github
https://github.com/mengx8/test
相关文章推荐
- Mysql Reference Constraint -ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
- How do I resolve git saying “Commit your changes or stash them before you can merge”?
- Git配置命令
- session超时设置
- svnant的BUILD FAILED Problem: failed to create task or type svnSetting Cause: The name is undefined原因
- [ChneChen的文字]盘点2015,来一个最励志故事
- 专业下载网站
- 计算器,现在仅支持正负号、加减乘除、次方和模运算。
- 关于setTimeout
- Android应用公布的准备——生成渠道包
- 文件上传
- 前端事件大全
- 深度学习用于基于内容的图像检索 Deep Learning for Content-Based Image Retrieval
- shell中的变量的备忘
- 【iOS学习笔记 15-12-31】 UIScrollview与Autolayout的那点事
- OSS bucket远程挂载成ECS本地盘之cloudfs4oss
- Java this关键字详解
- 将博客搬至CSDN
- Scala SynchronizedMap 与java ConcurrentHashMap 初探
- 看不清楚未来,请做好如今