商场收银改进C#版--融合了工厂和策略设计模式

简介: 其实,我自己开始没看书也作了整合。 可以运行,但代码奇丑无比。又不精简。 看了书之后,慢慢领略高手的思想吧。 主要还是对类,对象,实例,多态之类的不太熟悉。 有信心慢慢练习中。。。 1 double total = 0.

其实,我自己开始没看书也作了整合。

可以运行,但代码奇丑无比。又不精简。

看了书之后,慢慢领略高手的思想吧。

主要还是对类,对象,实例,多态之类的不太熟悉。

有信心慢慢练习中。。。

 1     double total = 0.0d;
 2         private void MainFormLoad(object sender, EventArgs e)
 3         {
 4             cbxType.Items.AddRange(new object[] {"正常收费","满300返100","打8折"});
 5             cbxType.SelectedIndex = 0;
 6         }
 7         
 8         void Button1Click(object sender, System.EventArgs e)
 9         {
10             CashContext cc = new CashContext(cbxType.SelectedItem.ToString());
11             double totalPrices = 0d;
12             totalPrices = cc.GetResult(Convert.ToDouble(txtPrice.Text)
13                                             * Convert.ToDouble(txtNum.Text));
14             total = total + totalPrices;
15             lbxList.Items.Add("单价: " + txtPrice.Text + "   数量: " + txtNum.Text +  " " 
16                               + cbxType.SelectedItem + "   合计: " + totalPrices.ToString());
17             lblResult.Text = total.ToString();
18         }
19         
20         void Button2Click(object sender, EventArgs e)
21         {
22             txtPrice.Text = Convert.ToString(0.00);
23             txtNum.Text = Convert.ToString(0);
24             lblResult.Text = Convert.ToString(0.00);
25             lbxList.Items.Clear();
26             cbxType.SelectedIndex = 0;
27             
28         }
29         
30     }
31     abstract class CashSuper
32     {
33         public abstract double acceptCash(double money);
34     }
35     class CashNormal : CashSuper
36     {
37         public override double acceptCash(double money)
38         {
39             return money;
40         }
41     }
42     class CashRebate : CashSuper
43     {
44         private double moneyRebate = 1d;
45         public CashRebate(string moneyRebate)
46         {
47             this.moneyRebate = double.Parse(moneyRebate);
48         }
49         public override double acceptCash(double money)
50         {
51             return money * moneyRebate;
52         }
53     }
54     class CashReturn : CashSuper
55     {
56         private double moneyCondition = 0.0d;
57         private double moneyReturn = 0.0d;
58         public CashReturn(string moneyCondition, string moneyReturn)
59         {
60             this.moneyCondition = double.Parse(moneyCondition);
61             this.moneyReturn = double.Parse(moneyReturn);
62         }
63         public override double acceptCash(double money)
64         {
65             double result = money;
66             if(money >= moneyCondition)
67                 result = money - Math.Floor(money / moneyCondition) * moneyReturn;
68             
69             return result;
70         }
71     }
72     
73     class CashContext
74     {
75         CashSuper cs = null;
76     
77         public  CashContext(string type)
78         {
79             switch (type)
80             {
81                 case "正常收费":
82                     CashNormal cs0= new CashNormal();
83                     cs = cs0;
84                     break;
85                 case "满300返100":
86                     CashReturn cr1 = new CashReturn("300", "100");
87                     cs = cr1;
88                     break;
89                 case "打8折":
90                     CashRebate cr2 = new CashRebate("0.8");
91                     cs = cr2;
92                     break;
93             }
94         }
95         public double GetResult(double money)
96         {
97             return cs.acceptCash(money);
98         }
99     }

输出:

目录
相关文章
|
1月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
80 0
|
1月前
|
设计模式 编解码 C++
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(一)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
85 0
|
1月前
|
设计模式 Java
设计模式之工厂
设计模式之工厂
|
1月前
|
设计模式 存储 缓存
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(二)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
44 0
|
1月前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
27天前
|
设计模式
设计模式之工厂 Factory
设计模式之工厂 Factory
19 1
|
27天前
|
设计模式 Java
设计模式之策略 Strategy
设计模式之策略 Strategy
20 1
|
1月前
|
缓存 算法 测试技术
优化 C#编程性能的策略
【4月更文挑战第20天】优化C#性能策略包括:选择合适算法和数据结构,避免频繁对象创建,缓存常用数据,减少内存分配,使用异步编程,优化数据库操作(如合理查询和使用索引),利用多线程并行处理,精简代码,使用性能分析工具,硬件升级,以及进行性能测试。综合应用这些策略可提升程序性能和响应性。
|
1月前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
1月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式