1、简单工厂模式

一、做一个商场收银软件

 

二、Code

复制代码
using System; 

namespace Web.策略模式
{
    
        /// <summary>
        /// 现金收费抽象类
        /// </summary>
        public abstract class CashSuper
        {
            /// <summary>
            /// 现金收取超类的抽象方法,收取现金,参数为原价,返回当前价
            /// </summary>
            /// <param name="money"></param>
            /// <returns></returns>
            public abstract double AcceptCash(double money);
        }

        /// <summary>
        /// 正常收费子类
        /// </summary>
        class CashNoraml:CashSuper
        {
            /// <summary>
            /// 正常收费 返回价格
            /// </summary>
            /// <param name="money"></param>
            /// <returns></returns>
            public override double AcceptCash(double money)
            {
                return money;
            }
        }

        /// <summary>
        /// 打折收费子类
        /// </summary>
        public  class CashRebate : CashSuper
        {
            private double moneyRebate = 1d;

            public CashRebate(string moneyRebate)
            {
                this.moneyRebate = double.Parse(moneyRebate);
            }
            /// <summary>
            /// 返回折扣价格×原价
            /// </summary>
            /// <param name="money"></param>
            /// <returns></returns>
            public override double AcceptCash(double money)
            {
                return money*moneyRebate;
            }
        }
        /// <summary>
        /// 返利收费子类
        /// </summary>
        public class CashReturn : CashSuper
        {
            private double moneyCondition = 0.0d;
            private double moneyRetrun = 0.0d;
            /// <summary>
            /// 返利收费,
            /// 初始化时必须要输入返利条件和返回值,比如满300返100,则moneyCondition为300,momeyReturn为100
            /// </summary>
            /// <param name="moneyCondition"></param>
            /// <param name="moneyReturn"></param>
            public CashReturn(string moneyCondition, string moneyReturn)
            {
                this.moneyCondition =double.Parse(moneyCondition) ;
                this.moneyRetrun =double.Parse(moneyReturn) ;
            }
            /// <summary>
            ///若大于返利条件则需要减去返利值
            /// </summary>
            /// <param name="money"></param>
            /// <returns></returns>
            public override double AcceptCash(double money)
            {
                double result = money;
                if (money>moneyCondition)
                {
                    result = money - Math.Floor(money/moneyCondition)*moneyRetrun;
                }
                return result;  
            }
        }
        /// <summary>
        /// 现金收费工厂类
        /// </summary>
        public class CashFactory
        {
            public static CashSuper CreateCashSuper(string type)
            {
                CashSuper cash = null;
                switch (type)
                {
                    case "正常收费":
                    cash=new CashNoraml();
                        break;
                    case "满300返100":
                    cash =new CashReturn("300","100");
                        break;
                    case "打折:85折":
                        cash=new CashRebate("0.85");
                        break;
                }
                return cash;
            }
        }

    /// <summary>
    /// 客户端实现
    /// </summary>
    class Customer
    {
        public void Method()
        {
             CashSuper cash = CashFactory.CreateCashSuper("type");
             cash.AcceptCash(100);
        } 
    }
} 
复制代码

 

三、UML类图一些概念

 

   

  

 如果商场现在需要买100送10元 消费100送10个积分 怎么办? 策略模式登场

 

 

      《大话设计模式》

posted @   PEPE YU  阅读(246)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示