• 状态模式作业


    任务的要求如下:  

       

    下面是设计的UML类图:

        

    下面是部分代码片段:

     1 /// <summary>
     2     /// 环境类
     3     /// </summary>
     4     public class Account
     5     {
     6         public AccountState State { set; get; }
     7         public string Owner { set; get; }
     8         public double Balance { set; get; }
     9 
    10         public Account(string owner, double initialAmount)
    11         {
    12             Owner = owner;
    13             Balance = initialAmount;
    14             State = new VistorState(this);  //设置初始状态
    15         }
    16 
    17         public void SetBalance(double amount)
    18         {
    19             Balance = amount;
    20 
    21         }
    22 
    23         //存款
    24         public void Deposit(double amount)
    25         {
    26             Console.WriteLine("存入" + amount);
    27             State.Deposit(amount);
    28             Console.WriteLine("用户状态变为" + State._Statename);
    29         }
    30 
    31         //消费
    32         public void Shopping(double amount)
    33         {
    34             Console.WriteLine("消费" + amount);
    35             State.Shopping(amount);
    36             Console.WriteLine("用户状态变为" + State._Statename);
    37         }
    38 
    39 
    40     }
     1  /// <summary>
     2     /// 抽象状态类
     3     /// </summary>
     4     public abstract class AccountState
     5     {
     6         protected Account _account;
     7         public string _Statename;
     8 
     9         public abstract void Deposit(double amount);
    10         public abstract void Shopping(double amount);
    11         public abstract void StateCheck();
    12     }
     1  /// <summary>
     2     /// 访客状态类
     3     /// </summary>
     4     public class VistorState:AccountState
     5     {
     6         public VistorState(Account account)
     7         {
     8             _account = account;
     9             _Statename = "访客账户";
    10             StateCheck();  //默认的检查
    11         }
    12 
    13         //取款
    14         public override void Deposit(double amount)
    15         {
    16             _account.Balance += amount;
    17             Console.WriteLine(_account.Owner + " 向账户中存款" + amount + "元,存款后的账户余额为:" + _account.Balance);
    18             StateCheck();
    19         }
    20 
    21         //消费
    22         public override void Shopping(double amount)
    23         {
    24             double newBalance = _account.Balance - amount;
    25             if (newBalance > 0)
    26             {
    27                 _account.Balance -= amount;
    28                 Console.WriteLine(_account.Owner + "在《访客服务》中消费" + amount + "元,账户余额:" + _account.Balance);
    29             }
    30             else
    31             {
    32                 Console.WriteLine("您的账户余额不足,请充值。");
    33             }
    34             StateCheck();
    35         }
    36 
    37         //检查用户状态
    38         public override void StateCheck()
    39         {
    40             if (_account.Balance > 100 && _account.Balance < 1000)
    41             {
    42                 //会员用户状态
    43                 _account.State = new MemberState(_account);
    44             }
    45             else if (_account.Balance > 1000)
    46             {
    47                 //贵宾用户状态
    48                 _account.State = new VIPState(_account);
    49             }
    50         }
    51     }
     1  /// <summary>
     2     /// 会员状态类
     3     /// </summary>
     4     public class MemberState:AccountState
     5     {
     6         public MemberState(Account account)
     7         {
     8             _account = account;
     9             _Statename = "会员账户";
    10         }
    11 
    12         //取款
    13         public override void Deposit(double amount)
    14         {
    15             _account.Balance += amount;
    16             Console.WriteLine(_account.Owner + " 向账户中存款" + amount + "元,存款后的账户余额为:" + _account.Balance);
    17             StateCheck();
    18         }
    19 
    20         //消费
    21         public override void Shopping(double amount)
    22         {
    23             double newBalance = _account.Balance - amount;
    24             if (newBalance > 0)
    25             {
    26                 _account.Balance -= amount;
    27                 Console.WriteLine(_account.Owner + "在《会员服务》中消费" + amount + "元,账户余额:" + _account.Balance);
    28             }
    29             else
    30             {
    31                 Console.WriteLine("您的账户余额不足,请充值。");
    32             }
    33             StateCheck();
    34         }
    35 
    36         //检查用户状态
    37         public override void StateCheck()
    38         {
    39             if (_account.Balance > 0 && _account.Balance < 100)
    40             {
    41                 //访客用户状态
    42                 _account.State = new VistorState(_account);
    43             }
    44             else if (_account.Balance > 1000)
    45             {
    46                 //贵宾用户状态
    47                 _account.State = new VIPState(_account);
    48 
    49             }
    50         }
    51     }
     1 /// <summary>
     2     /// 贵宾状态类
     3     /// </summary>
     4     public class VIPState:AccountState
     5     {
     6         public VIPState(Account account)
     7         {
     8             _account = account;
     9             _Statename = "贵宾账户";
    10         }
    11 
    12         //取款
    13         public override void Deposit(double amount)
    14         {
    15             _account.Balance += amount;
    16             Console.WriteLine(_account.Owner + " 向账户中存款" + amount + "元,存款后的账户余额为:" + _account.Balance);
    17             StateCheck();
    18         }
    19 
    20         //消费
    21         public override void Shopping(double amount)
    22         {
    23             double newBalance = _account.Balance - amount;
    24             if (newBalance > 0)
    25             {
    26                 _account.Balance -= amount;
    27                 Console.WriteLine(_account.Owner + "在《贵宾服务》中消费" + amount + "元,账户余额:" + _account.Balance);
    28             }
    29             else
    30             {
    31                 Console.WriteLine("您的账户余额不足,请充值。");
    32             }
    33             StateCheck();
    34         }
    35 
    36         //检查用户状态
    37         public override void StateCheck()
    38         {
    39             if (_account.Balance > 0 && _account.Balance < 100)
    40             {
    41                 //访客用户状态
    42                 _account.State = new VistorState(_account);
    43             }
    44             else if (_account.Balance > 100&&_account.Balance<1000)
    45             {
    46                 //会员用户状态
    47                 _account.State = new MemberState(_account);
    48             }
    49         }
    50     }
    /// <summary>
        /// 客户端代码
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                Account account = new Account("王大锤", 99);
                Console.WriteLine("开户成功。姓名:" + account.Owner + " 初始金额:" + account.Balance + " 账户类型:" + account.State._Statename);
                Console.WriteLine("----------------------------");
    
                account.Deposit(20);
                Console.WriteLine("-----------------------------");
    
                account.Shopping(30);
                Console.WriteLine("-----------------------------");
    
                account.Deposit(9999);
                Console.WriteLine("------------------------------");
    
                Console.ReadLine();
            }
        }

    下面是程序的结果:

       

  • 相关阅读:
    iOS:不同属性声明方式的解析
    iOS:图像和点击事件
    iOS:NAV+TABLE结合
    iOS:实现表格填充和选择操作
    iOS: 填充数据表格
    iOS:导航栏的工具条和导航条
    iOS:使用导航栏
    hello,world不使用ARC
    iOS代码实现:创建按钮,绑定按钮事件,读取控件值
    iOS版 hello,world版本2
  • 原文地址:https://www.cnblogs.com/bldz/p/5089780.html
Copyright © 2020-2023  润新知