本文摘自PHP中文网,作者零下一度,侵删。
题目:做一个商场收银的小程序,可能会出现的情况包括:正常收费,九折优惠,七折优惠,满300减50等各种不同随时会变化的优惠活动。界面如下:
分析:
首先我们对于收钱写一个父类CashSuper。这个父类是用来包含其他的各种收费方式的:正常收费、七折优惠、八折优惠、九折优惠、满300减50、满400减70、满500减100等情况,其中折扣优惠虽然不同,但是类型相似,满减优惠同理,故此我们可以将正常收费、折扣优惠与满减优惠分别划分为三个不同的类:CashNormal、CashRebate、CashReturn。
而CashSuper这个父类是用于继承的,所以我们设置为abstract用来被重写的,其次这个父类所包含的的三个子类都会共同调用到一个参数:那就是实际需要收到的商品的价格,所以我们的参数只需要传进来共同的参数:acceptMoney即可。
1 | 1 abstract class CashSuper2 {3 public abstract double acceptCash(double acceptMoney);4 }
|
然后就是正常收费:CashNormal
首先他从父类获得参数是实际需要收到的商品的价格,他本身事正常收费没有任何的优惠,所以直接返回从父类传进来的值即可。
1 | 1 class CashNormal : CashSuper2 {3 public override double acceptCash(double acceptMoney)4 {5 return acceptMoney;6 }7 }
|
折扣优惠:CashRebate
他和正常收费类似,继承于父类CashSuper,会获得来自于父类的参数,得到实际需要收到的商品的价格,但是他需要实现的是对商品进行打折优惠,所以他需要自己定义一个折扣优惠参数,这样别人调用他的时候将折扣参数传进来,他就可以通过对原价进行折扣优惠反馈给用户了。
1 | 1 class CashRebate : CashSuper 2 { 3
|
满减优惠:CashReturn
这个与折扣优惠类似了,只是他有两个参数而已:满减的水平线,和减扣多少。故此给此类定义两个参数即可。
1 | 1 class CashReturn : CashSuper 2 { 3
|
现在获得了几种优惠情况了,但是我们需要判断什么时候需要调用哪种优惠情况,这点我们通过用户的选择,用户将选择的优惠方式传输过来,我们再确定调用哪一种优惠方式,这就是利用简单工厂模式,将所有的优惠方式封装好,在进一步调用。
1 | 1 class CashFactory 2 { 3
|
最后在用户接口调用上面的函数即可。
1 | 1 private void ok_button_Click(object sender, EventArgs e) 2 { 3 7 CashSuper csuper = CashFactory.createCashAccept(typecomboBox.SelectedItem.ToString()); 8 9 totalPrices = csuper.acceptCash(double.Parse(unitPrice_textBox.Text) * double.Parse(amount_textBox.Text));10 total += totalPrices;11 listBox1.Items.Add( "单价:" + unitPrice_textBox.Text.ToString() + " 数量:" + amount.ToString() + " " + typecomboBox.SelectedItem.ToString() + " 合计:" + totalPrices.ToString());12 resultLabel.Text = total.ToString();13 }
|
以上就是C#简单工厂模式是什么?的详细内容!
相关阅读 >>
c#实现json序列化删除null值的方法实例
c#中string类型与json之间相互转换的实现方法
oracle clob字段过长保存出错改如何解决?
c#如何计算传入的时间距离今天的时间差的实例分享
详细了解在.net core 上运行的wordpress
解析.net逻辑分层架构
c#如何生成二维码的示例分享
c#编写windows服务程序的图文详解
.net mvc 使用ueditor上传图片
c#中noto sans字体支持韩文的实例教程
更多相关阅读请进入《csharp》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » C#简单工厂模式是什么?