C#设计模式——状态模式
来源:互联网 发布:电脑连不上网络打印机 编辑:程序博客网 时间:2024/05/18 18:18
今天我来说下状态模式。状态模式用处多多,可以实现状态的切换,废话不多说,代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StateModel{ public class Deficit:BeginState { public Deficit(BeginState state) { this.Account = state.Account; this.LeastMoeny = state.LeastMoeny; double HighLine = 0.00; double LowLine = -100.00; double interest = 0.00; } private void checke() { if (LeastMoeny > HighLine) { Account.state = new ZeroState(this); } } public override void SaveMoney(double amount) { LeastMoeny += amount; checke(); } public override void DrawMoney(double amount) { if (LeastMoeny-amount <LowLine) { Console.WriteLine("您已经没有钱可以取了!"); } } public override void GetInterest() { } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StateModel{ public class GetBenefit:BeginState { public GetBenefit(ZeroState state) { this.Account = state.Account; this.LeastMoeny = state.LeastMoeny; double HighLine = 1000000.00; double LowLine = 500.00; double interest = 0.03; } private void checke() { if (LeastMoeny < LowLine) { Account.state = new ZeroState(this); } else if (LeastMoeny < 0.0) { Account.state = new Deficit(this); } } public override void SaveMoney(double amount) { LeastMoeny += amount; checke(); } public override void DrawMoney(double amount) { LeastMoeny -= amount; checke(); } public override void GetInterest() { LeastMoeny += LeastMoeny * interest; checke(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StateModel{ public class ZeroState:BeginState { public ZeroState(Account Account, double LeastMoeny) { this.Account=Account; this.LeastMoeny = LeastMoeny; double HighLine=500.00; double LowLine=0.00; double interest = 0.00; } public ZeroState(BeginState state):this(state.Account,state.LeastMoeny) { }//用于简化运算,提高效率,将状态传递到下一步 private void Checke()//定义一个用于判断目前状态的函数 { if (LeastMoeny > HighLine) { Account.state = new GetBenefit(this);//大于上限,则跳转至下一状态 } else if (LeastMoeny < LowLine) { Account.state = new Deficit(this); } } public override void SaveMoney(double amount) { LeastMoeny += amount; Checke(); } public override void DrawMoney(double amount) { LeastMoeny -= amount; Checke(); } public override void GetInterest() { LeastMoeny += LeastMoeny * interest; Checke(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StateModel{ public class Account { public BeginState state{set;get; } public string AccountName { set; get; }//封装属性 public Account(string AccountName) { this.AccountName = AccountName; this.state = new ZeroState(this,0);//定义初始的变量和启动方法 } public double LeastMoney { get { return state.LeastMoeny; }//每执行一次,返回当前余额 } public void save(double amount) { state.SaveMoney(amount); Console.WriteLine("存款金额为:"+amount); Console.WriteLine("当前存款余额为:" + this.LeastMoney); Console.WriteLine("账户状态:" + this.state.GetType().Name); } public void draw(double amount) { state.DrawMoney(amount); Console.WriteLine("取款金额为:" + amount); Console.WriteLine("当前存款余额为:" + this.LeastMoney); Console.WriteLine("账户状态:" + this.state.GetType().Name); } public void interest() { state.GetInterest(); Console.WriteLine("当前获得的利息:"); Console.WriteLine("当前存款余额为:" + this.LeastMoney); Console.WriteLine("账户状态:" + this.state.GetType().Name); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StateModel{///前面定义了三种银行账户的存储状态 public abstract class BeginState { public Account Account {set;get; } public double LeastMoeny { set; get; }//定义账户余额 public double HighLine { set; get; }//定义上限 public double LowLine { set; get; }//定义下限 public double interest{set;get; }//定义利息 public abstract void SaveMoney(double amount);//定义存钱的抽象方法 public abstract void DrawMoney(double amount);//定义取钱的抽象方法 public abstract void GetInterest();//定义获得利息的抽象方法 }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StateModel{ class Program { static void Main(string[] args) { Account name = new Account("陈翔"); name.save(500.00); name.save(900.00); name.save(1800.00); name.draw(1900.00); name.draw(1400.00); name.draw(1400.00); Console.ReadKey(); } }}
0 0
- C#设计模式——状态模式
- 设计模式—状态模式
- 设计模式—状态模式
- C#设计模式之21——状态模式
- C#设计模式——状态模式(State Pattern)
- [设计模式] 状态模式-C#
- 【C#设计模式-状态模式】
- 设计模式——状态设计模式
- 设计模式——状态,C# 语言范例
- 设计模式——状态模式(State)
- 设计模式——状态模式
- java设计模式——状态模式
- PHP设计模式——状态模式
- 设计模式之——状态模式
- 设计模式之——状态模式
- 设计模式(19)——状态模式
- 设计模式——状态模式
- C++设计模式——状态模式
- 基于bcel的class动态编译
- spring-boot 之 使用Admin监控应用
- 关于微信公众号,你不知道的小技巧
- 第一篇博客
- NotImplementedError: tostring() has been removed. Please call tobytes() instead的解决办法
- C#设计模式——状态模式
- 自定义滑动ViewPage
- 修改状态栏文字颜色?
- 流式布局
- Eclipse中启动tomcat访问404解决及原因
- Java 连接oracle 的maven配置
- spring 涉及到注解说明
- 数据库 必会题目
- Javaweb中JavaScript地址栏对象和屏幕对象