简单工厂和策略模式结合

商场促销活动:打折、满额返现等等

 

主函数对工厂模式和策略模式结合的调用:

    class Program
    {
        static void Main(string[] args)
        {
            //简单工厂模式
            CashSuper csuper = CashFactory.CreateCashAccept("打8折");
            float re = csuper.AcceptCash(100);

            //策略模式与简单工厂结合用法
            CashContext csup = new CashContext("打8折");
            float re1 = csup.GetResult(100);

            Console.WriteLine(re.ToString() +"----"+ re1.ToString());
            Console.ReadKey();
        }
    }

CashSuper类定义:(返回参加活动后结果,使用多态特性)

    public abstract class CashSuper
    {
        public abstract float AcceptCash(float money);
    }

正常价格、打折和满额返现的实现:

    public class CashNormal : CashSuper
    {
        public override float AcceptCash(float money)
        {
            return money;
        }
    }

    public class CashRebate : CashSuper
    {
        private float moneyRebate = 1;
        public CashRebate(string moneyRebate)
        {
            this.moneyRebate = float.Parse(moneyRebate);
        }
        public override float AcceptCash(float money)
        {
            return money * moneyRebate;
        }
    }

    public class CashReturn : CashSuper
    {
        private float moneyCondition = 0;
        private float moneyReturn = 0;
        public CashReturn(string moneyCondition, string moneyReturn)
        {
            this.moneyCondition = float.Parse(moneyCondition);
            this.moneyReturn = float.Parse(moneyReturn);
        }
        public override float AcceptCash(float money)
        {
            float result = money;
            if (money >= moneyCondition)
            {
                result = (float)(money - Math.Floor(money / moneyCondition) * moneyReturn);
            }
            return result;
        }
    }

简单工厂的工厂类:

    public class CashFactory
    {
        public static CashSuper CreateCashAccept(string type)
        {
            CashSuper cs = null;
            switch (type)
            {
                case "正常收费":
                    cs = new CashNormal();
                    break;
                case "满300返100":
                    cs = new CashReturn("300", "100");
                    break;
                case "打8折":
                    cs = new CashRebate("0.8");
                    break;
            }
            return cs;
        }
    }

策略模式结合简单工厂:

    class CashContext
    {
        private CashSuper cs;
        public CashContext(string type)
        {
            switch (type)
            {
                case "正常收费":
                    cs = new CashNormal();
                    break;
                case "满300返100":
                    cs = new CashReturn("300", "100");
                    break;
                case "打8折":
                    cs = new CashRebate("0.8");
                    break;
            }
        }
        public float GetResult(float money)
        {
            return cs.AcceptCash(money);
        }
    }

简单的代码,使用的面向对象的主要特性:封装、继承、多态。

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/lmfeng/archive/2012/07/17/2594714.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python day15

今日内容 昨日内容补充: 对于两个文件中的互相导入md模块问题分析: x 1from md import xprint(x)# md中的xfrom md import xx 1000print(x)# 当前文件中的x __all__ 列表写什么,执行导入语句那个文件就能拿到什么; __all__不写的情况,默认是将所在文件所有的名字都暴露给导入…

如何有效抓取SQL Server的BLOCKING信息

2019独角兽企业重金招聘Python工程师标准>>> SQL Server允许并发操作,BLOCKING是指在某一操作没有完成之前,其他操作必须等待,以便于保证数据的完整性。BLOCKING的解决方法要查看BLOCKING的头是什么,为什么BLOCKING头上…

ubuntu14.04上网问题

以下内容源于朱友鹏《物联网大讲坛》课程学习,如有侵权,请告知删除。 一、配置须知 (1)虚拟机上网有2种模式,NAT和桥接。 (2)虚拟机上网配置注意点 注意选择NAT还是桥接模式;注意u…

centOS 6 rpm安装MySQL小记

今天在虚拟机重新搞一个MySQL 但是在安装的时候 一直在报错 错误信息就不贴了 大概就是 mysql-lib 冲突 导致安装不成功。 首先 在centOS里面 会自带一个mysql-lib 那么我们首先要卸载他就好了 1. rpm -qa | grep -i mysql 这时你会看到mysql-lib 2. yum remo…

secureCRT中文字符乱码

1.远程linux机器。修改环境变量LANG。例如在~/.bash_profile里面添加export LANGzh_CN.UTF8 2.本地windows机器。修改SecureCRT的设置。找到“全局选项”->“默认会话”->“编辑默认设置”:“外观”->"字符编码"->"UTF-8"转载于:…

iOS开发篇——OC 协议和代理设计模式介绍

蓝鸥iOS培训讲师推荐:好久没和大家沟通了,没和大家沟通了,今天就和大家说说有关OC内容协议和代理设计模式。首先要讲的是协议一、协议OC中的协议和接口有些相似,协议中定义的方法,在类中实现。协议一般情况下是用来实现…

uboot的移植——移植uboot官方的uboot到x210开发板

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考内容 uboot——官网下载直接移植(一) - biaohc - 博客园 uboot——官网下载直接移植(二) - biaohc - 博客园 uboot移植(一)配置过程分析_LouisGou的博客-CSDN博客 获取…

[转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...

前言 本章将实现非常实用的功能——下载在线视频。涉及到多线程、线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术细节实现&#xff01…

CodeForces - 627A

CodeForces - 627Ahttps://vjudge.net/problem/326413/originab (a&b)<<1 (a^b);然后是位运算&#xff0c;如果对于这一位置&#xff0c;异或值为1时&#xff0c;有两种可能&#xff0c;由乘法原理&#xff0c;答案<<1。如果sx&#xff0c;就会出现一方全0&am…

vim编辑器中如何查找某个词

在命令模式&#xff08;进入后直接按shift&#xff1a;&#xff09;下输入 /xxx&#xff0c;这个是查找文件中“xxx”这个单词&#xff0c;是从文件上面到下面查找&#xff1b; &#xff1f;xxx&#xff0c;这个是查找文件中“xxx”这个单词&#xff0c;是从文件下面到上面查…

Hibernate上路_16-继承关系映射

2019独角兽企业重金招聘Python工程师标准>>> 例&#xff1a;员工Employee分为正式工SalaryEmployee和临时工HourEmployee。子类表的字段都不能使用非空约束。 1.三种继承关系的建表方式&#xff1a; 1&#xff09;父类、子类在同一张表&#xff0c;表中有“辨别者…

Android中的AnimationDrawable的使用

首先可以先定义一个逐帧播放的xml&#xff1a; 1 <?xml version"1.0" encoding"utf-8"?>2 <animation-list xmlns:android"http://schemas.android.com/apk/res/android"3 android:oneshot"false" >4 5 <ite…

HttpUtility编码

程序集&#xff1a; system .web HttpUtility.UrlDecode UrlEncode HttpUtility.UrlEncode 方法: 对 URL 字符串进行编码&#xff0c;以便实现从 Web 服务器到客户端的可靠的 HTTP 传输。 转载于:https://www.cnblogs.com/whl4835349/p/11208191.html

C++起航篇——bool类型,输入输出,命名空间

以下内容源于慕课网http://www.imooc.com/course/list?ccplusplus的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 慕课网学习内容 一、起航 二、离航 三、远征 封装继承多态模板 1、c的新特征 &#xff08;1&#xff09;新数据类型 bool &#xff08;true和fals…

Metasploit没有db_autopwn命令的解决办法

转载自&#xff1a;宁夏网络安全信息平台[http://www.nxfbi.com]未加载前&#xff1a;msf > db_db_connect db_driver db_import db_statusdb_disconnect db_export db_nmap解决办法&#xff1a;将附件db_autopwn.rp 拷贝到/opt/framework3/msf3/plugin…

C++离航篇——引用,const

以下内容源于http://www.imooc.com/learn/381的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、引用 &#xff08;1&#xff09;引用即定义别名 对引用进行操作即对本身操作&#xff1b;int a10; int &ba; //定义了a的别名b&#xff1b;注意别名是不包括&…

msbuild explorer

http://msbuildexplorer.com/转载于:https://www.cnblogs.com/dmdj/p/3439366.html

【广搜】棋盘游戏

题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋&#xff0c;当且仅当两个格子有公共边&#xff0c;这两个格子上的棋是相邻的。移动棋子的规则是交换相邻两个棋子。现在给出一个初始棋盘和一个最终棋盘&#xff0c;要求你找出一个最短的移动序列使初始棋盘变为最终棋盘。Klux说…

C++离航篇——函数默认参数、函数重载、内敛函数

1、函数的默认参数 2、函数的重载 &#xff08;1&#xff09;在相同的作用域内&#xff0c;用同一个函数名定义的多个函数&#xff0c;其中每个函数的参数个数、参数类型不同。 3、内联函数 &#xff08;1&#xff09;编译的时候&#xff0c;将函数体代码和相应的实参直接在函…

POJ——字符串插入

欢迎来我的个人网站&#xff1a;http://www.rxwcv.cn 2:字符串插入 查看提交统计提问总时间限制: 1000ms 内存限制: 65536kB描述有两个字符串str和substr&#xff0c;str的字符个数不超过10&#xff0c;substr的字符个数为3。&#xff08;字符个数不包括字符串结尾处的\0。&…