弹指一挥间,从事开发工作两年多了,工作记录文件夹不知不觉好几G了。今天分享下之前项目中用到的一个购物车示例,虽然用的技术比较老(拖放控件DataGview),我觉得里面包含了很多可以细细咀嚼的面向对象思想,尤其是商品和购物车各个对象的从属关系。购物车老生常谈的东西,希望能起到抛砖引玉的效果。下面就简单介绍下吧!(via:女孩礼物网)
此款短小精悍的购物车主要有三大功能:1.折扣方案调整 2.商品列表 3.购物车
复制代码
1 using System;
2 using System.Collections.Generic;
3
4 [Serializable]
5 public class Product {
6
7 int id;
8
9 public int Id {
10 get { return id; }
11 set { id = value; }
12 }
13
14 string name;
15
16 public string Name {
17 get { return name; }
18 set { name = value; }
19 }
20
21 decimal price;
22
23 public decimal Price {
24 get { return price; }
25 set { price = value; }
26 }
27
28 string unit;
29
30 public string Unit {
31 get { return unit; }
32 set { unit = value; }
33 }
34
35 public Product(int id, string name, decimal price, string unit) {
36 this.id = id;
37 this.name = name;
38 this.price = price;
39 this.unit = unit;
40 }
41 }
复制代码
复制代码
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5
6 [Serializable]
7 public class ShopCartItem {
8
9 private Product product;
10 private int count;
11
12 public Product Product {
13 get { return product; }
14 set { product = value; }
15 }
16 public int Count {
17 get { return count; }
18 set { count = value; }
19 }
20
21 /// <summary>
22 /// 单项总折后价。
23 /// </summary>
24 public decimal Price {
25 get {
26 decimal price = (decimal)0;
27 List<IDiscountable> discountsUsing = (List<IDiscountable>)HttpContext.Current.Application["DiscountsUsing"];
28 price = this.TotalPrice;
29 foreach (IDiscountable discount in discountsUsing) {
30 price = price * (decimal)discount.GetDiscount(this.product.Price, this.count);
31 }
32 return price;
33 }
34 }
35
36 /// <summary>
37 /// 单项总原价
38 /// </summary>
39 public decimal TotalPrice {
40 get{
41 return this.product.Price * this.count;
42 }
43 }
44
45 public ShopCartItem(Product product, int count) {
46 this.product = product;
47 this.count = count;
48 }
49 }
复制代码
复制代码
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5
6 [Serializable]
7 public class ShopCartSet : IEnumerable<ShopCartItem> {
8
9 private Dictionary<int, ShopCartItem> items;
10
11 public ShopCartSet() {
12 this.items = new Dictionary<int, ShopCartItem>();
13 }
14
15 /// <summary>
16 /// 各项总原价
17 /// </summary>
18 public decimal TotalPrice {
19 get {
20 decimal price = (decimal)0;
21 foreach (ShopCartItem item in this) {
22 price = price + item.TotalPrice;
23 }
24 return price;
25 }
26 }
27
28 /// <summary>
29 /// 各项总折后价
30 /// </summary>
31 public decimal Price {
32 get {
33 decimal price = (decimal)0;
34 foreach (ShopCartItem item in this) {
35 price = price + item.Price;
36 }
37 return price;
38 }
39 }
40
41 public ShopCartItem this[int id] {
42 get {
43 return this.items[id];
44 }
45 set {
46 this.items[id] = value;
47 }
48 }
49
50 public void Add(Product product, int count) {
51 this.Add(new ShopCartItem(product, count));
52 }
53
54 public void Add(ShopCartItem item) {
55 if (!this.items.ContainsKey(item.Product.Id)) {
56 this.items.Add(item.Product.Id, item);
57 }
58 else {
59 this.items[item.Product.Id].Count++;
60 }
61 }
62
63 public void Remove(int key) {
64 this.items.Remove(key);
65 }
66
67 public void Remove(Product product) {
68 this.items.Remove(product.Id);
69 }
70
71 public void Remove(ShopCartItem shopCartItem) {
72 this.items.Remove(shopCartItem.Product.Id);
73 }
74
75 #region 接口实现
76 public IEnumerator<ShopCartItem> GetEnumerator() {
77 return this.items.Values.GetEnumerator();
78 }
79
80 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
81 return this.items.Values.GetEnumerator();
82 }
83 #endregion
84 }
1 using System;
2 using System.Collections.Generic;
3
4 [Serializable]
5 public class Product {
6
7 int id;
8
9 public int Id {
10 get { return id; }
11 set { id = value; }
12 }
13
14 string name;
15
16 public string Name {
17 get { return name; }
18 set { name = value; }
19 }
20
21 decimal price;
22
23 public decimal Price {
24 get { return price; }
25 set { price = value; }
26 }
27
28 string unit;
29
30 public string Unit {
31 get { return unit; }
32 set { unit = value; }
33 }
34
35 public Product(int id, string name, decimal price, string unit) {
36 this.id = id;
37 this.name = name;
38 this.price = price;
39 this.unit = unit;
40 }
41 }