登陆注册
8183300000173

第173章 4 购物车系统

大B:“假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。”

小A:“一般会有哪些情况哩?”

大B:“比如:1、可能对所有的儿童类图书实行每本一元的折扣;2、计算机类图书提供每本7%的促销折扣,而对电子类图书有3%的折扣;3、剩余的图书没有折扣。4、还会有新的打折策略。由于有这样复杂的折扣算法,使得价格计算问题需要系统地解决。”

方案一:业务逻辑放在各具体子类

/**//*

*各子类实现销售价格算法

*/

public abstract class Book……{

private double price;

private String name;

public String getName()……{

return name;

}

public void setName(String name)……{

this。name=name;

}

public double getPrice()……{

return price;

}

public void setPrice(double price)……{

this。price=price;

}

public abstract double getSalePrice();

}

public class CsBook extends Book……{

public CsBook(String name,double price)

{

this。setName(name);

this。setPrice(price);

}

public double getSalePrice()

……{

return this。getPrice()*0.93;

}

}

public class ChildrenBook extends Book……{

public ChildrenBook(String name,double price)……{

this。setName(name);

this。setPrice(price);

}

public double getSalePrice()……{

return this。getPrice()-1;

}

}

public class Client……{

public static void main(String args[])

……{

Book csBook1=new CsBook(“Think in java”,45);

Book childrenBook1=new ChildrenBook(“Hello”,20);

System。out。println(csBook1.getName()+:+csBook1.getSalePrice());

System。out。println(childrenBook1.getName()+:+childrenBook1.getSalePrice());

}

}

问题:每个子类必须都各自实现打折算法,即使打折算法相同。所以code reuse不好

方案二:

//把打折策略代码提到父类来实现code reuse

public abstract class Book……{

private double price;

private String name;

public String getName()……{

return name;

}

public void setName(String name)……{

this。name=name;

}

public double getPrice()……{

return price;

}

public void setPrice(double price)……{

this。price=price;

}

//销售价格

public static double toSalePrice(Book book)

……{

if(book instanceof ChildrenBook)

……{

return book。getPrice()-1;

}

else if(book instanceof CsBook)

……{

return book。getPrice()*0.93;

}

return 0;

}

}

public class Client……{

public static void main(String args[])

……{

Book csBook1=new CsBook(“Think in java”,45);

Book childrenBook1=new ChildrenBook(“Hello”,20);

System。out。println(csBook1.getName()+:+Book。toSalePrice(csBook1));

System。out。println(childrenBook1.getName()+:+Book。toSalePrice(childrenBook1));

}

}

toSalePrice方法是比较容易change的地方,如果策略复杂用if判断比较乱,并且策略修改或增加时需改变原代码。

方案三:策略模式

code reuse时最好用合成(HAS-A)而不用(IS-A),更加灵活。

public abstract class Book……{

private double price;

private String name;

private DiscountStrategy discountStrategy;//折扣策略

public String getName()……{

return name;

}

public void setName(String name)……{

this。name=name;

}

public double getPrice()……{

return price;

}

public void setPrice(double price)……{

this。price=price;

}

public DiscountStrategy getDiscountStrategy()……{

return discountStrategy;

}

同类推荐
  • 微软360度

    微软360度

    本书是由微软总部华人协会组织编写的第二本书,是《微软360度——企业和文件》一书的姐妹篇,本书将着重向你呈现微软总部的华人专家是如何一步一步地走向成功的及在微软总部成功的心路历程,以及如何应对挑战,揭示了微软成功的最重要秘密之一——人才至上,读者读后收获更多的是这些成功人士的成功经验,从而为自己的成功做出更好的规划。就让我们一起通过此书来看看微软公司人才至上管理的方方面面,聆听微软的心声,感觉微软的脉动吧。
  • 一本书读懂24种互联网思维

    一本书读懂24种互联网思维

    本书整合的改变世界的24种互联网思维,让我们对互联网新思维的认识变得立体、系统起来;同时深入浅出、通俗易懂地从技术和实践分析互联网新思维与传统思维相比较的优势,医治互联网焦虑症。未来属于既能深刻理解传统商业的本质,同时又具备互联网思维的人。
  • 互联网创业前奏曲(第二部)——网站运营之人性、策略与实战

    互联网创业前奏曲(第二部)——网站运营之人性、策略与实战

    本书是《互联网创业前奏曲》系列的第二本书,是作者多年互联网实践经验和业界观察的总结,是国内罕有的关于互联网网站运营和用户心理结合的书籍,用通俗的语言阐述互联网运营背后的人性驱动。你想互联网创业吗?你是否在为找不到好的互联网运营策略和方法而发愁?你非常想了解互联网行业?你是否在为自己不了解互联网运营而苦恼?本书针对这些问题列举了很多互联网运营的案例,帮你制定运营策略,更好的修炼和提升运营功力。
  • 都是网络惹的祸

    都是网络惹的祸

    本书分网络游戏、网络聊天、网络隐私、网络网吧安全、网络文化、网络语言、网络犯罪、网络陷阱等栏目,从不同的视角探讨了在当今社会的网络现象。
热门推荐
  • 棠棣融融载其华

    棠棣融融载其华

    十六岁前的山间隐居岁月,她天真烂漫,看春雨和雾蒙蒙,看秋花寒暄树色同;十六岁后的繁华市井生活,她情窦初开,始知相忆之深。她说,他这辈子都逃不出她的手心了。因此,在他被迫远征时,她断然随他同去。入塞寒,处处黄芦草,只要有他陪在身边,她却甘愿共于沙尘老。然而,官场的是非,以及皇室的争斗,将她的爱人卷入其中。
  • 花都逍遥游

    花都逍遥游

    世界上唯一的男性驱魔师,百花丛中过,满身世花瓣……一件坑爹的生日礼物让一个平凡到过目即忘的平凡男改变了一生,雷神?他有神雷剑,火神?他有烈焰斧。上帝,很抱歉他有斩神剑。众多美女相伴,花都之中任我逍遥乐无边……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 苍鹰秘传

    苍鹰秘传

    天罗位面,六大帝国并肩而立数千年,既有帝国长盛不衰,亦有帝国积贫积弱,千年时光,转瞬即逝,暗流涌动,各方势力蠢蠢欲动。三名绝世天才应劫而生,其真实身份无人知晓。群雄交锋,神秘组织影狼牙蠢蠢欲动,欲展露锋芒。零花帝国,国力日上,麾下暗盟供其驱使,野心渐露。奥兰帝国,八妖仕天下皆知,莫名解散。天姬霸道,巾帼之身败尽天下豪杰,世人敬仰。苍鹰曹鑫,枭雄之名举世闻名,绝色帝姬如影随行,其目的究竟是?精灵之泪,在背叛中灰飞烟灭,却自有余孽横行。天下大变,英雄集结,然天下大势,竟尽皆在一家之手,他们都出于同门,天姬,帝姬,暗盟新一代头目,影狼的主人···然世事无常,纵使掌天下之势,却未必笑到最后。
  • 逐道纪之北土尘事

    逐道纪之北土尘事

    上古年间天神渊魔大战,共归于虚灭。众天神归灭之前为保人灵子嗣免受妖邪侵袭之苦,以鸿海为界将大地分为南北二土。善类居于北土,妖邪居于南土,妖邪始终不能跨越鸿海。北土万灵生息,天神子嗣于九岳山建立天神殿,以道经经文为学术之源,创造文明历法。千万年后,在天神殿七百六十五纪,北土遭南方妖族侵袭,南土妖族势不可挡,全面侵入北土。众生灵再遭战争劫难。战争中,天神殿出现了一位法力强大的天师,天师洞悉妖邪秘密,携四位法力强大的神将共往鸿海破掉妖族法阵,将妖族赶回南土。战争结束之后,这位神族天师创下“鸿教”,并在鸿教教义中告知北土末世。三百年后,洛神殿域内锭口城现烛龙天象。按神宗殿旨意,锭口城举办择神会。在择神会之际,城中一位守卫军伍长无意间接触到了神魔的秘密......。
  • 轻羽情缘

    轻羽情缘

    古老幽静的紫藤庄园里,一号大宅来了一位新主人,不过他有着不为人知的“身份”,吸血族,也就是被人类称为吸血鬼的“物种”。他们千百年来隐居在人类中间,孤僻而神秘,并有着严格的种族制度,以确保不被人类因恐惧而产生的仇视所威胁。一号宅的新主人在同伴还未来到的日子里,在这个豪宅里独自过着清闲的生活。一天闲来无事的他来到了一家书屋,在这遇到了一个女孩。女孩过于充满活力,让本不喜欢人类的他很不适应。但莫名地,他和女孩间却出现了各种”瓜葛“,他对女孩的印象也渐渐改变并喜欢上她。然而,一个突然的闯入者,干扰了他们的感情发展,让一切变得令人焦躁不安。而与此同时,他却发现了女孩身上藏着某种秘密……
  • 新唐门秘传

    新唐门秘传

    家里族长突然病逝,唐门族人纷纷赶回老家奔丧。身为家族的长女且无男嗣的情况下,她无意之间发现一些关于唐门的秘史。一切顺理成章,但总感觉一切又那么让人放心不下。那位运命多舛的掌门,跟自己一样的右眼含有双眸,一样的脾气秉性,一样的敏感多疑,一样马不由缰。是命运轮回,还是当真只是所谓的家族遗传?腰际闻风哭泣的风来咽,摊在掌心自碎两半的玉生烟,以及梅花树下,那人昂藏七尺,美如冠玉,一身青色布艺执一把寒剑。一切都经常出现在梦里面,怎么又会出现在这书卷?【基本,每天晚上十点左右一更,多谢推荐,打赏】
  • 别样大亨

    别样大亨

    已经被家人放弃的林峰,一次出游遇到意外让他开启别样人生,民以食为天,美食让更多人喜欢而疯狂。
  • 花千骨之仙兰茗

    花千骨之仙兰茗

    花千骨到了神界,忘记了人间的一切,再次下界,人间所有人都不记得花千骨了,再来了一次,会怎么样呢?
  • 师尊在上:徒儿嫁到啦

    师尊在上:徒儿嫁到啦

    苗九九,女,恋爱没谈过,男人没碰过,到死都还是老处*女。重活一世,发誓要网尽天下美男!!!世人都说万丈峰峰主,风流倜傥,才华横溢,貌比潘安更是洁身自好?某女:啊呸!其夫人却长的奇丑无比,胸大无脑,好色成性!某男:将胸大无脑改为胸无,点墨!某女:......