享元模式(咖啡屋)【java与模式】
2013-12-28 17:21
393 查看
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与模式》中的咖啡屋代码,拿来理解“享元模式”非常合适!
相关文章推荐
- java反射详解
- Java程序性能优化Tip
- java解惑
- hibernate 注解 注释到 数据库 以及 java字段与数据库字段对应说明
- Ubuntu下搭建 eclipse+NDK for android JNI 的开发环境
- java web应用解决乱码问题
- Spring STS 安装FreeMaker插件
- ECLIPSE使用HG插件去上载 GOOGLE.CODE下的代码
- Myeclipse8.6中svn插件安装方法总结
- Exception from System.loadLibrary(smjavaagentapi) java.lang.UnsatisfiedLinkError: no smjavaagentapi in java.library.path
- Java程序时间和空间性能优化Tip
- 蜗牛—JavaWeb之个人信息管理系统(一)
- java 输入流
- 利用AbstractRoutingDataSource实现动态数据源切换(Spring+Ibatis)
- 利用AbstractRoutingDataSource实现动态数据源切换 (Spring+Hibernate)
- java.lang包概述
- Spring框架值注解
- spring 定时器时间配置
- 解决 - java.lang.OutOfMemoryError: unable to create new native thread
- 用eclipse编写MapReduce程序的基本要点