商场收银改进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     }

输出:

目录
相关文章
|
2月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
96 0
|
2月前
|
设计模式 编解码 C++
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(一)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
113 0
|
2月前
|
设计模式 存储 缓存
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(二)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
70 0
|
2月前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
1月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
16天前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
28 0
|
24天前
|
设计模式 Java 开发者
工厂设计模式的实现与应用场景分析
工厂设计模式的实现与应用场景分析
|
25天前
|
设计模式 存储 C#
|
25天前
|
设计模式 算法 C#
23种设计模式【C#代码举例】(上)
23种设计模式【C#代码举例】(上)
|
1月前
|
设计模式 C#
技术经验分享:C#设计模式
技术经验分享:C#设计模式
10 0

热门文章

最新文章