program.cs

来自「GOF23种设计模式详细例子!附有详细的代码噢!」· CS 代码 · 共 135 行

CS
135
字号
using System;
using System.Collections.Generic;
using System.Text;

namespace StateExample
{
    class Program
    {
        static void Main(string[] args)
        {
            User user = new User("zhuye");
            user.BuyBook(2000);
            user.BuyBook(2000);
            user.BuyBook(2000);
            user.BuyBook(2000);
        }
    }

    class User
    {
        private UserLevel userLevel;

        public UserLevel UserLevel
        {
            get { return userLevel; }
            set { userLevel = value; }
        }

        private string userName;

        private double paidMoney;

        public double PaidMoney
        {
            get { return paidMoney; }
        }

        public User(string userName)
        {
            this.userName = userName;
            this.paidMoney = 0;
            this.UserLevel = new NormalUser(this);
        }

        public void BuyBook(double amount)
        {
            Console.WriteLine(string.Format("Hello {0}, You have paid ${1}, You Level is {2}.", userName, paidMoney, userLevel.GetType().Name));
            double realamount = userLevel.CalcRealAmount(amount);
            Console.WriteLine("You only paid $" + realamount + " for this book.");
            paidMoney += realamount;
            userLevel.StateCheck();            
        }
    }

    abstract class UserLevel
    {
        protected User user;

        public UserLevel(User user)
        {
            this.user = user;
        }

        public abstract void StateCheck();
        public abstract double CalcRealAmount(double amount);
    }

    class DiamondUser : UserLevel
    {
        public DiamondUser(User user)
            : base(user) { }

        public override double CalcRealAmount(double amount)
        {
            return amount * 0.7;
        }

        public override void StateCheck()
        {

        }

    }

    class GoldUser : UserLevel
    {
        public GoldUser(User user)
            : base(user) { }

        public override double CalcRealAmount(double amount)
        {
            return amount * 0.8;
        }

        public override void StateCheck()
        {
            if (user.PaidMoney > 5000)
                user.UserLevel = new DiamondUser(user);
        }
    }

    class SilverUser : UserLevel
    {
        public SilverUser(User user)
            : base(user) { }

        public override double CalcRealAmount(double amount)
        {
            return amount * 0.9;
        }

        public override void StateCheck()
        {
            if (user.PaidMoney > 2000)
                user.UserLevel = new GoldUser(user);
        }
    }

    class NormalUser : UserLevel
    {
        public NormalUser(User user)
            : base(user) { }

        public override double CalcRealAmount(double amount)
        {
            return amount * 0.95;
        }

        public override void StateCheck()
        {
            if (user.PaidMoney > 1000)
                user.UserLevel = new SilverUser(user);
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?