登陆注册
8183300000090

第90章 5 咖啡外卖店

大B:“我就以咖啡外卖店写几个java类来描述说明Flyweight设计模式的实现方式吧。”

客户买咖啡下订单,订单只区分咖啡口味,如果下了1W个订单,而咖啡店只卖20种口味的咖啡,那么我们就没有必要生成1W个订单对象,通过享元模式我们只需要生成20个订单对象。

这个例子举的不太好,但足以说明问题。下面是具体的代码。

1、Order。java订单抽象类

2、FlavorOrder。java订单实现类

3、FlavorFactory。java订单生成工厂

4、Client。java客户类、带有main方法的测试类

……1、Order。java

package flyweight;

public abstract class Order{

//执行卖出动作

public abstract void sell();

//获取咖啡口味

public abstract String getFlavor();

}

……1 end

……2、FlavorOrder。java

package flyweight;

public class FlavorOrder extends Order{

private String flavor;

public FlavorOrder(String flavor){

this。flavor=flavor;

}

public String getFlavor(){

return this。flavor;

}

public void sell(){

System。out。println(“卖出一杯[” flavor “]。”);

}

}

……2 end

……3、FlavorFactory。java

package flyweight;

import java。util。HashMap;

import java。util。Map;

public class FlavorFactory{

//订单池

private Map《String,Order》flavorPool=new HashMap《String,Order》(20);

//静态工厂,负责生成订单对象

private static FlavorFactory flavorFactory=new FlavorFactory();

private FlavorFactory(){}

public static FlavorFactory getInstance(){

return flavorFactory;

}

//获得订单

public Order getOrder(String flavor){

Order order=null;

if(flavorPool。containsKey(flavor)){

order=flavorPool。get(flavor);

}else{

//获得新口味订单

order=new FlavorOrder(flavor);

//放入对象池

flavorPool。put(flavor,order);

}

return order;

}

//获得已经卖出的咖啡全部口味数量

public int getTotalFlavorsMade(){

return flavorPool。size();

}

}

……3 end

……4、Client。java

package flyweight;

import java。util。ArrayList;

import java。util。List;

public class Client{

//客户下的订单

private static List《Order》orders=new ArrayList《Order》(100);

//订单对象生成工厂

private static FlavorFactory flavorFactory;

//增加订单

private static void takeOrders(String flavor){

orders。add(flavorFactory。getOrder(flavor));

}

public static void main(String[]args){

//订单生成工厂

flavorFactory=FlavorFactory。getInstance();

//增加订单

takeOrders(“摩卡”);

takeOrders(“卡布奇诺”);

takeOrders(“香草星冰乐”);

takeOrders(“香草星冰乐”);

takeOrders(“拿铁”);

takeOrders(“卡布奇诺”);

takeOrders(“拿铁”);

takeOrders(“卡布奇诺”);

takeOrders(“摩卡”);

takeOrders(“香草星冰乐”);

takeOrders(“卡布奇诺”);

takeOrders(“摩卡”);

takeOrders(“香草星冰乐”);

takeOrders(“拿铁”);

takeOrders(“拿铁”);

//卖咖啡

for(Order order:orders){

order。sell();

}

//打印生成的订单java对象数量

System。out。println(“\n客户一共买了” orders。size() “杯咖啡!”);

//打印生成的订单java对象数量

System。out。println(“\n共生成了” flavorFactory。getTotalFlavorsMade() “个FlavorOrder java对象!”);

}

}

同类推荐
  • 下一代互联网

    下一代互联网

    本书系统介绍了下一代互联网的进展情况,包括下一代互联网的概念解析,国内外下一代互联网的最新发展情况,下一代互联网的关键技术进展,以及各国发展下一代互联网的政策计划。最后分析了下一代互联网对未来社会的影响,提出我国发展下一代互联网的政策建议等。全书共6章,包括互联网发展历史和现状,下一代互联网基本概念,下一代互联网研究最新进展,下一代互联网发展现状,我国发展下一代互联网现状,发展下一代互联网战略建议。
  • 微软360度

    微软360度

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

    云计算和现代远程教育

    本书介绍了云计算知识、云计算的特性、云计算技术、云计算中的访问云、云计算中的云存储、云计算在远程教育中的应用等内容。
  • 大话设计模式

    大话设计模式

    本书主要采用JAVA语言介绍设计模式中比较常见的23种设计模式,分29章具体介绍,以现实生活中常见的事情为例来具体分析讲解。
  • 悟道:一位IT高管20年的职场心经

    悟道:一位IT高管20年的职场心经

    本书是一位有20多年职场经验的IT企业高管撰写的一系列有关职场悟道的短文集成,讲述的是在企业里如何修炼自己,如何摆平自己的心态,怎样做到“世事洞明”和“人情练达”,如何“搞定老板”,怎样做到工作和生活平衡等诸多话题,涉及到跳槽、转行、升迁、环境、沟通、老板、下属、老外等等。每一篇都以作者的亲身经历或者身边的故事说明道理,语言简洁流畅,妙趣横生,更有不少经典片段和发人深省的职场警句,读起来就像是一个睿智幽默的老朋友坐在你面前娓娓道来。
热门推荐
  • 低碳环境

    低碳环境

    地球是我们共同的家园,白云蓝天,雾霭流岚、花香鸟语、蝶舞莺飞……如此美丽的环境需要我们共同的呵护。不要让小河的水总是恶臭,不要让机动车的尾气令人掩住口鼻,不要让草丛里的塑料袋不计其数……让我们牵起手,从一点一滴的小事做起,使我们的地球更美丽,更精彩。
  • 末世之黎明奔袭

    末世之黎明奔袭

    杜衡末日前是一名律师,某日没有预兆的迎来了末世,在毫无准备的情况下,杜衡带着母亲踏上了逃亡求生之路。在末世丧尸病毒肆虐之下,杜衡又将如何生存下去?本文有人性描写,有儿女情长,有兄弟情谊,发展系自由向,着重描写末日丧尸病毒之下的求生之路。
  • 武乱星随

    武乱星随

    诺大宇宙,无尽生灵轮转覆灭,只为一代天骄、傲世枭雄登顶晋神。两大平行宇宙,锋芒毕露现峥嵘,沉浮万年,刀锋一出十方神陨,倾峰界齐力阻神。他身为龙皇之子,却流离异国他乡,平凡而快乐的生活、成长。他拥有一颗平凡的心,知熟善恶,向往强大。异族入侵,在他心中种上了想要变强大的种子,仇恨之心令他走上一条复仇之路,在生死边缘游走,在深渊中涅槃。“当我归来之日,必是你龙魂殿覆灭之时。”但,没有人相信这个懵懂尘世的少年的誓言,即便是神也不曾相信。当那孤单的身影纵横在云天九霄,以身抗衡天地,以眼睥睨天下,宛如一道神祗。“挡我者杀,阻我者伐。”在那片龙子不敢纵横,翎羽不能遮天的绝世凶地上,那渺小的身影却能主宰沉浮。还有谁能阻止他?他是否能够延续往世的辉煌?他是否能够延续神的传说?敬请关注,武乱星随。
  • 巴啦啦小魔仙之真言公主

    巴啦啦小魔仙之真言公主

    真言公主光临人间,之后发生的关于魔法的事
  • 末代公主荣寿

    末代公主荣寿

    她是慈禧皇太后的养女,恭亲王奕訢长女,身为郡主却破例晋封为荣寿固伦公主,成为了中国最后一位公主。她当面批评慈禧打扮妖治,调和慈禧与光绪的矛盾,安排慈禧光绪的丧事,满清倒台也余威仍存。她的夫君在属于她之前,已经是试婚格格的男人。她被心爱之人视作不供戴天的灭族仇敌。
  • 阴差阳错爱上你

    阴差阳错爱上你

    只是买一块地而已,用得着她出卖色相吗?尤其是这块地的主人还是那啥……一群让人啼笑皆非莫名其妙的乡下人!好吧,她发誓,她绝对没有鄙视乡下人的意思,但是但是——她是真的从来没有想过,自己居然会栽在那群乡下人中的“那个”乡下人的手中啊!
  • 六界之火焰血

    六界之火焰血

    万千的宠爱竟只为了让他成为众矢之的!他与她命运这般相似,他对她的怜惜究竟是可怜她还是可怜自己。若可怜之人没有了可恨之处,那便只剩下可怜罢了。。。。。。他是国都洛宁的世家子弟,她是江湖第一门派的大小姐。他和她这一世的情缘,终究在复仇、权利间纠缠。“不管你是谁,纨绔的薛家少爷,凉薄的梅园公子,还是如今这般权势滔天的四皇子,我百里滢欣喜欢的,都只是你。”
  • 我的精灵生涯

    我的精灵生涯

    我,本来的人生规划是成为我父亲一样的科学家。可直到后来的性格表事件,导致我被囚禁了。过了很多年,我终于被放出来了。对了,我的干爹是坂木。-----------节奏偏慢-------------------
  • 爱情白米粥

    爱情白米粥

    谁没有失意的时候,谁没有不开心的时候,如果一切看开了,其实也就那么样子,所谓快快乐乐也是一天一天的过,不快快乐乐也是一天一天的过,何不快快乐乐的过每一天呢!失恋的痛苦虽然由表面上看来,像是情形不一,内容复杂;可是认真说来,却也都很简单——无非是因为当局者迷,不能退后几步,离远一点去冷静观察,或虽明知其中问题焦点所在,可偏偏自己固执着不肯承认。
  • 天行

    天行

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