package com.javapatterns.flyweight.coffeeshop;

public class Flavor extends Order
{
private String flavor; public Flavor(String flavor)
{
this.flavor = flavor;
} public String getFlavor()
{
return this.flavor;
} public void serve(Table table)
{
System.out.println("Serving table " + table.getNumber() + " with flavor " + flavor );
}
}
package com.javapatterns.flyweight.coffeeshop;

public class Table
{
private int number; public Table(int number)
{
this.number = number;
} public void setNumber(int number)
{
this.number = number;
} public int getNumber()
{
return number;
} }
package com.javapatterns.flyweight.coffeeshop;

public class FlavorFactory
{
/**
* @label Flyweight
* @link aggregation
*/
private Order[] flavors = new Flavor[10];
private int ordersMade = 0;
private int totalFlavors = 0 ; public Order getOrder(String flavorToGet)
{
if (ordersMade > 0)
{
for (int i = 0; i < ordersMade; i++)
{
if (flavorToGet.equals((flavors[i]).getFlavor()))
{
return flavors[i];
}
}
}
flavors[ordersMade] = new Flavor(flavorToGet);
totalFlavors++;
return flavors[ordersMade++];
} public int getTotalFlavorsMade()
{
return totalFlavors;
}
}
package com.javapatterns.flyweight.coffeeshop;

public class Client
{
//the flavors ordered /**
* @label Creates
*/
private static Order[] flavors = new Flavor[100]; private static int ordersMade = 0;
private static FlavorFactory flavorFactory; /** @link dependency */
/*#Table lnkTable;*/ private static void takeOrders(String aFlavor)
{
flavors[ordersMade++] = flavorFactory.getOrder(aFlavor);
} public static void main(String[] args)
{
flavorFactory = new FlavorFactory(); takeOrders("Black Coffee");
takeOrders("Capucino");
takeOrders("Espresso");
takeOrders("Espresso");
takeOrders("Capucino");
takeOrders("Capucino");
takeOrders("Black Coffee");
takeOrders("Espresso");
takeOrders("Capucino");
takeOrders("Black Coffee");
takeOrders("Espresso"); for (int i = 0; i < ordersMade; i++)
{
flavors[i].serve(new Table(i));
} System.out.println("\nTotal teaFlavor objects made: " +
flavorFactory.getTotalFlavorsMade());
}
}

《java与模式》中的咖啡屋代码,拿来理解“享元模式”非常合适!

最新文章

  1. 提权GrantPrivilege
  2. Network - SNMP
  3. [操作系统实验lab4]实验报告
  4. POJ-2378 Tree Cutting
  5. openerp权限设置总结
  6. Cocos2d-x 3.2编译Android程序错误的解决方案
  7. mysql 导出,导入数据
  8. 3. QT窗体间值的传递(续)
  9. windows下,用绝对路径向html文件中插入图片
  10. Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进
  11. CentOS 7 使用yum安装出现错误
  12. U面经Prepare: Web Address
  13. react-native-router-flux
  14. 牛客小白月赛6C-桃花(DFS/BFS求树的直径)
  15. emmm
  16. 获取css最终样式
  17. c++builder 读写文件类
  18. php引用(&amp;)变量引用,函数引用,对象引用和参数引用用法
  19. 开源TSDB简介--Druid
  20. 构建高可靠hadoop集群之0-hadoop用户向导

热门文章

  1. SharePoint服务器将连接配置数据库的连接字符串保存在什么地方?
  2. Headless MSBuild Support for SSDT (*.sqlproj) Projects [利用msbuild自动化部署 .sqlproj]- 摘自网络
  3. SNMP: Simple? Network Management Protocol(转)
  4. 七行jquery代码实现图片渐变切换【兼容ie6+、 Chrome、 Firefox】
  5. ServletContext获取项目真实路径
  6. php静态方法与非静态方法在性能上有什么区别?
  7. T-SQL语句查看作业等信息
  8. 微信中QQ表情的解析(php)
  9. hi3531 SDK 编译 uboot, 改动PHY地址, 改动 uboot 參数 .
  10. Android开源git40个App源码