[关键字]:java,design pattern,设计模式,《Java与模式》学习,阎宏,Ph.D,Flyweight Pattern,享元模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
[正文]:
一个有外蕴状态的单纯享元例子:咖啡屋(Coffee Shop)
package pattern.flyweight.coffee.shop;
import java.util.*;
/**
* 一个有外蕴状态的单纯享元例子
* 咖啡屋:Coffee Shop
* @version 2009-6-25
* @author Winty(wintys@gmail.com)
*/
public class CoffeeShopTest{
public static void main(String[] args){
FlavorFactory f = FlavorFactory.getInstance();
Table t1,t2;
t1 = new Table(101);
t2 = new Table(102);
Order o1,o2,o3;
o1 =f.factory("Black Coffee");
o2 = f.factory("Espresso");
o3 = f.factory("Black Coffee");
o1.serve(t1);
o2.serve(t1);
o3.serve(t2);
f.checkFlyweight();
}
}
/**
* 抽象享元角色
*/
abstract class Order{
public abstract void serve(Table table);
public abstract String getFlavor();
}
/**
* 具体享元角色
*/
class Flavor extends Order{
private String flavor;//内蕴状态
public Flavor(String flavor){
this.flavor = flavor;
}
@Override
public void serve(Table table){
System.out.println("serve " + flavor + " to " + table.getNum());
}
@Override
public String getFlavor(){
return flavor;
}
}
/**
* 享元工厂:使用单例模式实现
*/
class FlavorFactory{
private static FlavorFactory f = new FlavorFactory();
private Map<String , Order> map;
public FlavorFactory(){
map = new HashMap<String , Order>();
}
public static FlavorFactory getInstance(){
return f;
}
public Order factory(String flavor){
Order order = null;
if(map.containsKey(flavor)){
order = map.get(flavor);
}
else{
order = new Flavor(flavor);
map.put(flavor , order);
}
return order;
}
/**
* 辅助方法
*/
public void checkFlyweight(){
Iterator<Map.Entry<String , Order>> it
= map.entrySet().iterator();
System.out.println(""ncheck flyweight:");
while(it.hasNext()){
Map.Entry<String , Order> entry = it.next();
String key = entry.getKey();
System.out.println("key:" + key);
}
}
}
/**
* 外蕴状态类
*/
class Table{
private int num;
public Table(int num){
setNum(num);
}
public int getNum(){
return num;
}
public void setNum(int num){
this.num = num;
}
}
运行结果:
serve Black Coffee to 101
serve Espresso to 101
serve Black Coffee to 102
check flyweight:
key:Black Coffee
key:Espresso
- 大小: 54.7 KB
分享到:
相关推荐
在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立的内存空间。 享元模式由以下几个关键角色组成: 1. **享元接口(Ingredients)**: 定义了享元对象的基本行为,如获取...
《安琪咖啡屋创业计划书》是一份详细的商业规划文档,由创业者李安琪精心编撰,旨在阐述其开设咖啡屋的愿景、策略和实施步骤。这份计划书涵盖了多个关键领域,包括市场分析、产品定位、运营模式、财务预算、营销策略...
创业计划书-奶茶咖啡甜品蛋糕面包-大学咖啡屋创业计划书
3. **商业模式**:咖啡屋可能采用自助式、服务员服务或结合两者的方式运营。考虑到大学生群体的特性,可能需要提供舒适的环境供学生学习、讨论或休息,同时也要考虑是否提供无线网络、电源插座等设施。 4. **选址...
【大学咖啡屋创业计划书】 在当今社会,创业已经成为...通过深入研究市场需求、竞争对手、运营模式和财务预测,大学咖啡屋创业计划书将为创业者提供一个坚实的基础,帮助他们实现梦想,成功开启校园内的咖啡屋事业。
总体而言,《安琪咖啡屋创业计划书》是一部集市场研究、商业模式、运营策略、财务规划、营销手段和风险管理于一体的综合性指南。它不仅为潜在投资者提供了一个清晰的项目轮廓,更为创业者指引了方向,提供了详细的...
此外,它还包含了丰富的JavaScript插件,可以实现各种复杂的交互效果。这套源代码文件还具有高度的可定制性。您可以根据自己的需求对页面进行布局调整、颜色更改以及内容替换,轻松打造出符合您项目风格的网站。...
北岸咖啡屋作为一家具有前瞻性的创业项目,在其创业计划书中,详细阐述了如何结合现代信息技术,打造出一个在数字化时代中具有竞争力的商业模式。 首先,在市场分析部分,计划书明确指出了对目标市场的深入理解是...
【心晴咖啡屋营销策划案】是一份综合性的文档,旨在为新开设的咖啡屋——心晴咖啡屋提供一套全面的市场推广策略和运营规划。这份策划案融合了作者的原创思维与对行业资料的深入研究,确保了其独特性和实用性。 首先...
【创业计划书-大学咖啡屋创业计划书】 创建一家大学咖啡屋是一项充满挑战与机遇的创业项目。在制定这样的创业计划书时,需要全面考虑多个关键要素,包括市场分析、商业模式、运营策略、财务预算以及风险评估。以下...
创业计划书-北岸咖啡屋创业计划书
咖啡店无线组网实训 本实训旨在让学生了解无线局域网的组网模式和协议,掌握无线局域网的配置,掌握 PPPoE 的配置。通过本实训,学生将学习如何设计和配置无线局域网,如何使用 WDS 桥接方式连接多个路由器,如何...
此外,考虑到咖啡屋可能提供的多种服务,如咖啡、西餐、甜品等,模板可能包含了多个页面布局,如首页、菜单展示页、关于我们、联系方式等,以满足不同的展示需求。每个页面都可能经过精心设计,采用高质量的图像和...
【大学咖啡屋创业计划书范本】 在创建任何企业,尤其是大学咖啡屋这样的小型创业项目时,一份详尽且有说服力的创业计划书是必不可少的。这份文档将引导我们探讨创业计划书中涵盖的关键知识点,以帮助理解如何构建一...
北岸咖啡屋的创业计划书是一份详尽的商业策划文档,主要涵盖了开设一家结合奶茶、咖啡、甜品、蛋糕及面包的多元化餐饮店铺的各个方面。这份计划书旨在为潜在投资者或创业者提供全面的市场分析、运营策略、财务预算...
【企业管理 PPT 文档资料】中的“校区云山咖啡屋广告策划”主要涉及以下几个关键知识点: 1. **消费者分析**: - 大学生作为主要消费群体,他们追求时尚和品位,消费能力相对较高。 - 现有消费者包括大学生和教师...
宠物咖啡馆-宠物咖啡馆平台-宠物咖啡馆平台源码-宠物咖啡馆平台java代码-宠物咖啡馆平台设计与实现-基于springboot的宠物咖啡馆平台-基于Web的宠物咖啡馆平台设计与实现-宠物咖啡馆网站-宠物咖啡馆网站源码-宠物咖啡...
微信静态模板---咖啡网站模板
4. **运营模式**:这包括咖啡屋的日常运营流程,如供应链管理(咖啡豆和食材采购)、员工配置、营业时间、卫生标准等。 5. **财务预测**:一份完整的计划书会提供详细的财务预测,包括启动资金需求、预期收入、成本...