购物车中设计模式

              

    提到到设计模式,很多人可能会困惑,甚至是反感.到处都看到文章说设计模式是如何的重要,但是自己写代码的时候却发现很少用到设计模式,甚至可能觉得这是个沽名钓誉的东西,谈不清也说不明.

    确实我之前也觉得设计模式是非常的高深,很难接触一二,但是通过不断的写代码,写完后再回顾总结的时候,却发现设计模式确实给我们指出了一条明道,只有通过实际项目的体会,才能明白其中道理,就像兵书读的再多,没有实际带兵打过仗,不过是纸上谈兵而已.

    我在不断工作中时常会停下来做些思考,希望能给写过的代码找到一些归宿,能够让这些代码能够更好的被复用,易扩展.

    因为做的电子商务网站,接触到最多的就是各种各样的打折方式了,逢年过节就要搞一个促销,比如什么满300送100了,买一件第二件对折了,什么商品的积分翻倍了,什么买三送一了,总之就是非常的多.

    之前写代码很规矩,老老实实的写,购物车中有多少商品,数量是多少,然后价格乘以数量就ok了.后来就不对劲了市场部总是提出一个又一个折腾人的促销方式,没办法,得满足啊,谁叫咱是程序员呢,呵呵.

    写了2个,3个促销方式之后,发现了他们有很多通用的地方,这个时候就想谋求有什么好的解决方案了.既然他们有很多公共的地方,那么就可以把他们抽象出来放在一个父类里面,其他的促销方式继承这个父类,然后重写里面的计算方法就可以了.

比如:

 

Code
  1
  2
  3using System; 
  4
  5using System.Collections.Generic; 
  6
  7using System.Web; 
  8
  9 
 10
 11namespace Study 
 12
 13
 14
 15public abstract class Sell 
 16
 17
 18
 19private List<ShoppingCartItem> _list; 
 20
 21 
 22
 23/**//// <summary> 
 24
 25/// 购物车 
 26
 27/// </summary> 

 28
 29public List<ShoppingCartItem> List 
 30
 31
 32
 33get return _list; } 
 34
 35set { _list = value; } 
 36
 37}
 
 38
 39 
 40
 41/**//// <summary> 
 42
 43/// 计算金额 
 44
 45/// </summary> 
 46
 47/// <returns></returns> 

 48
 49public abstract decimal GetAmount(); 
 50
 51 
 52
 53}
 
 54
 55 
 56
 57public class SellHalf : Sell 
 58
 59
 60
 61public override decimal GetAmount() 
 62
 63
 64
 65//todo 
 66
 67return 111
 68
 69//throw new NotImplementedException(); 
 70
 71}
 
 72
 73}
 
 74
 75 
 76
 77public class SellSend : Sell 
 78
 79
 80
 81public override decimal GetAmount() 
 82
 83
 84
 85 
 86
 87return 222
 88
 89//throw new NotImplementedException(); 
 90
 91}
 
 92
 93}
 
 94
 95 
 96
 97public class SellContext 
 98
 99
100
101Sell sell; 
102
103 
104
105public SellContext(string type) 
106
107
108
109if (type == "1"
110
111sell = new SellHalf(); 
112
113else 
114
115sell = new SellSend(); 
116
117}
 
118
119 
120
121public decimal GetAmount() 
122
123
124
125return sell.GetAmount(); 
126
127}
 
128
129}
 
130
131 
132
133public class SellFactory 
134
135
136
137public static Sell CreateSell(string type) 
138
139
140
141if (type == "1"
142
143return new SellHalf(); 
144
145else 
146
147return new SellSend(); 
148
149}
 
150
151}
 
152
153 
154
155public class ShoppingCartItem 
156
157
158
159 
160
161}
 
162
163}
 
164
165 
166
167 
168
169class Program 
170
171
172
173static void Main(string[] args) 
174
175
176
177//简单工厂模式 
178
179Sell sell = SellFactory.CreateSell(Console.ReadLine()); 
180
181Console.WriteLine(sell.GetAmount().ToString()); 
182
183 
184
185//策略模式 
186
187SellContext cnt = new SellContext(Console.ReadLine()); 
188
189Console.WriteLine(cnt.GetAmount().ToString()); 
190
191 
192
193Console.ReadLine(); 
194
195 
196
197}
 
198
199 
200
201static void Write1() 
202
203
204
205Console.WriteLine("1"); 
206
207}
 
208
209 
210
211static void Write2() 
212
213
214
215Console.WriteLine("2"); 
216
217}
 
218
219}
 
220
221 
222
223


这里就涉及到职责单一模式,简单改成模式和策略模式.

在学习设计模式的过程中,也能不断的体会到面向对象的魅力.

职责单一就是一个类的功能要越少越好,只有一个可以引起他改变的因素,这样他们功能很单一,便于复用不容易出错.

    简单工厂模式就是在不同的情况下能够给我们提供不同的类型.

策略模式,其实跟简单工厂模式差不多,就是做了进一步的封装,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值