登陆注册
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对象!”);

}

}

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

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

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

    都是网络惹的祸

    本书分网络游戏、网络聊天、网络隐私、网络网吧安全、网络文化、网络语言、网络犯罪、网络陷阱等栏目,从不同的视角探讨了在当今社会的网络现象。
  • 信息技术教育大全-操作系统大全

    信息技术教育大全-操作系统大全

    本书系统介绍说明了有关电子信息系统及操作系统等知识,希望对该信息技术有需求的读者能够从中得到帮助。
  • 爱上我的“手机女友”

    爱上我的“手机女友”

    本书共有五个部分:第一章:千娇百媚的我—手机门类大搜索第二章:了解我的心—手机“芯”理学第三章:不一样的我不一样的美—手机的万种风情第四章:命中注定我爱你—神秘手机星座解读第五章:有求必应贴心女友—手机的绝世武功通过这本书,想要购入手机的你会知道哪款手机女友更适合你,已有心仪手机的你可以让手机女友懂得更多变得更聪明。希望这本书能够帮助你在手机选购上和手机使用上更舒心、安心、贴心。
  • 初级会计电算化

    初级会计电算化

    本书是作者根据历年会计从业资格考试的考试大纲以及多年对真题的分析,并结合多为专家、学者的实践经验而编写的。本书主要分为八套模拟试卷,以对考生考前的学习进行模拟实战,达到提高考生成绩的目的。
热门推荐
  • 制胜职场:中国本土顶级CEO

    制胜职场:中国本土顶级CEO

    你知道“打工皇后”吴士宏当年是如何以自考大专生身份进入IBM的吗?你知道为什么李开复坚决不录用一个非常有才华的年轻人吗?你知道李彦宏的全球选人用人之道吗?……这是一本解密的书,因为很多故事不为人知,很多小提醒为人所不知;这是一本没有秘密的书,因为很多故事散见在五花八门媒体报道中,不少大道理被众说纷纭;这是一本适合那些愿意不断被激发和挖掘自身潜能的职场人读的书。这是一本应运而生的书。奇书。
  • 酷帅四王子缠上四公主

    酷帅四王子缠上四公主

    她们是最好的朋友兼闺蜜,他们是最好的朋友兼兄弟,当他(她)们遇见后会擦出怎样的火花呢?
  • 我是游戏女神

    我是游戏女神

    新书《我的末世变身卡牌》 她手中的长剑保持着刺进对方的肩膀的动作。这一击将对方的最后一点生命值抹除,他的身体化作光粒子消散在竞技场内。 “恭喜华夏区的清歌絮玩家获得本次比赛的冠军!真是一场精彩的较量......” 主持人激昂的声音通过直播,在全世界各个角落回响。华夏区的玩家欢呼着女神之名,激动得与身边的朋友相拥...... 这,是属于清歌絮的时代。 但谁又知道,女神清歌絮其实是个男人呢? ……(交流群:337541829,你们的支持是对我最大的鼓励。)
  • 长生世子

    长生世子

    人生在世怎可不走走江湖?君不闻天下豪杰,是君之损失!今生的江湖乃是千年大世,有着百年不曾一败的吕战神,有早已隐居的白剑仙,亦有流水一剑斩万妖的青衣侠客。数名妖孽汇聚一世,百名天骄聚一堂,此等盛世,你可见过?且看世子殿下走遍江湖,经历红尘往事,步步走向巅峰!走进江湖,走尽江湖,方知你的好。为了你,我愿了却天下不平事。
  • 唯我傲天

    唯我傲天

    现世少年偶遇时空之门,奇特的穿越之旅,神秘的新大陆,蛮荒古兽占据洪荒森林;神圣万佛普度众生;魔法世界光怪陆离,战神霸王争战天地;更有神秘的科技世界.....同样的人,不一样的人生,为了人生信念执着不息,斗气纵横、魔法凌乱、仙魔共舞,黑白颠倒......怨世不公?屠神戮仙,唯我傲天。
  • 老港情

    老港情

    90年代的闽口港很穷,没饱饭吃的张有米,连名字都跟温饱有关。沧海桑田,二十年后,闽口港早不是当初的样子。然而,那群一起穷大的孩子,那些朴实的港湾故事,还在吗?
  • 中外名家言行教育格言与故事

    中外名家言行教育格言与故事

    作为人生的追求者,茫茫人海,关键在于找到属于自己的名家导师,关键在于找到鼓舞自己的名言警句,当然,最关键的是在这些金玉良言的指导下付诸切实的行动。将教育与格言、故事结合起来,这是一种全新的尝试,能够达到最好的教育效果。为此,我们特别编辑了《中外名家教育格言与故事全集》,包括美德、修养、爱国、性格、心理、处世、理想、习惯、言行、成功等方面的教育格言与故事。
  • 英雄联盟之浮尘

    英雄联盟之浮尘

    符文之战的结束,瓦罗兰大陆最终在联盟学院的干涉下迎来了短暂的和平,然而诺克萨斯的野心不会止步…暗影岛的黑暗、破败、腐朽、肮脏...似乎在诠释着什么!亡灵之主的重生,地狱之门的开启,无数像深渊复仇的怨灵…恕瑞玛的皇帝回来了,祖安中黑暗魔法科技的崛起,比尔吉沃特海港常年的动荡侵袭,艾卡西亚的虚空生物以及弗雷尔卓德的神灵…还有禁魔法的德玛西亚等,似乎都在诉说着符文大陆的太平只是联盟学院的一厢情愿…永不凋谢的玫瑰,异世界的远古巨龙,嚎哭深渊下的失落之桥,刺撤心灵的极寒之地究竟埋藏了多少不为人知的秘密…诸神黄昏,厄难中所有的人都在证明着一场腥风血雨即将来临…我是楼栏,一场穿越联盟大地瓦罗兰大陆的神奇之旅即将开启…
  • 时间的弧度

    时间的弧度

    他用诗行圈起了一道道的生活藩篱而蒙养着自己高尚的品格,他的诗情充满一种自然的力量,渐渐地在这沉寂之中喷溅而出,格外引人注目。
  • 刘帝传

    刘帝传

    2016年的一位37岁男子,遭遇车祸灵魂偶然穿越时空,来到异界,穿越后附身于刘家村15岁少年刘俊身上,且看少年成神之路。