享元模式(咖啡屋)【java与模式】
2024-09-10 12:04:50
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与模式》中的咖啡屋代码,拿来理解“享元模式”非常合适!
最新文章
- 提权GrantPrivilege
- Network - SNMP
- [操作系统实验lab4]实验报告
- POJ-2378 Tree Cutting
- openerp权限设置总结
- Cocos2d-x 3.2编译Android程序错误的解决方案
- mysql 导出,导入数据
- 3. QT窗体间值的传递(续)
- windows下,用绝对路径向html文件中插入图片
- Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进
- CentOS 7 使用yum安装出现错误
- U面经Prepare: Web Address
- react-native-router-flux
- 牛客小白月赛6C-桃花(DFS/BFS求树的直径)
- emmm
- 获取css最终样式
- c++builder 读写文件类
- php引用(&;)变量引用,函数引用,对象引用和参数引用用法
- 开源TSDB简介--Druid
- 构建高可靠hadoop集群之0-hadoop用户向导
热门文章
- SharePoint服务器将连接配置数据库的连接字符串保存在什么地方?
- Headless MSBuild Support for SSDT (*.sqlproj) Projects [利用msbuild自动化部署 .sqlproj]- 摘自网络
- SNMP: Simple? Network Management Protocol(转)
- 七行jquery代码实现图片渐变切换【兼容ie6+、 Chrome、 Firefox】
- ServletContext获取项目真实路径
- php静态方法与非静态方法在性能上有什么区别?
- T-SQL语句查看作业等信息
- 微信中QQ表情的解析(php)
- hi3531 SDK 编译 uboot, 改动PHY地址, 改动 uboot 參数 .
- Android开源git40个App源码