OO design trap
需求如下:
有这样一家超市,对顾客实行会员制,会员目前分为两个等级:金卡及银卡。
每次会员购物时,都会根据会员等级提供不同的折扣优惠和返点。
设计方案有三个:
1. 过程设计,用作对比
2. 过程式的OO设计,简单来说就是将过程设计中的函数封装到类里面
3. 标准的OO设计,封装、继承、多态、设计模式,能用的都用上
问题:
如果是你,你会采用哪种OO设计,或者有更好的设计?
过程式设计:
- // client:
- string id = input_id;
- string type = GetMemberTypeByID();;
- int discount = GetDiscountByType(type);;
- int point = GetReturnPoint(type);;
- // service:
- string GetMemberTypeByID(string id);
- {
- string type;
- // get type by id
- ...
- return type;
- }
- int GetDiscount(string type);
- {
- switch(type);
- {
- case "金卡":
- return 10;
- case "银卡"
- return 5;
- }
- return 0;
- }
- int GetReturnPoint(string type);
- {
- switch(type);
- {
- case "金卡":
- return 1.5;
- case "银卡"
- return 1;
- }
- return 0;
- }
OO设计1(仅使用封装特性)
- // client:
- string id = input_id;
- Member member = new Member(id);;
- int discount = member.GetDiscount();;
- int point = member.GetReturnPoint();;
- // service:
- class Member
- {
- string type;
- public Member(string id);
- {
- type = GetMemberTypeByID(id);;
- }
- protected string GetMemberTypeByID(id);
- {
- string type;
- // get type by id
- ...
- return type;
- }
- public int GetDiscount();
- {
- switch(type);
- {
- case "金卡":
- return 10;
- case "银卡"
- return 5;
- }
- return 0;
- }
- public int GetReturnPoint();
- {
- switch(type);
- {
- case "金卡":
- return 1.5;
- case "银卡"
- return 1;
- }
- return 0;
- }
- }
严重声明:本文版权属原作者所有 本文重在收藏和学习
原文地址:http://www.iteye.com/topic/17714