[关键字]: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
分享到:
相关推荐
用享元模式分析并实现一个具体案例。在一家咖啡店中客户每买一杯咖啡,咖啡制做系统就相应地创建该杯咖啡的配料表,并将其发送给店内的咖啡制做机,咖啡制做机接收到系统发送的配料表后便开始制造客户所买的咖啡。...
创业计划书-奶茶咖啡甜品蛋糕面包-安琪咖啡屋创业计划书----李安琪
创业计划书-安琪咖啡屋创业计划书----李安琪
创业计划书-奶茶咖啡甜品蛋糕面包-大学咖啡屋创业计划书
创业计划书-奶茶咖啡甜品蛋糕面包-北岸咖啡屋创业计划书
创业计划书-奶茶咖啡甜品蛋糕面包-大学咖啡屋创业计划书范本
此外,它还包含了丰富的JavaScript插件,可以实现各种复杂的交互效果。这套源代码文件还具有高度的可定制性。您可以根据自己的需求对页面进行布局调整、颜色更改以及内容替换,轻松打造出符合您项目风格的网站。...
2009307119-校园咖啡屋创业计划书.doc
创业计划书-北岸咖啡屋创业计划书
创业计划书-大学咖啡屋创业计划书
参考资料-北岸咖啡屋创业计划书.zip
参考资料-大学咖啡屋创业计划书.zip
创业计划书-奶茶咖啡甜品蛋糕面包-休闲屋果汁店创业计划书
PHPWind论坛 咖啡屋
参考资料-大学咖啡屋创业计划书范本.zip
国家开放大学形考参加答案,欢迎借阅!
微信静态模板---咖啡网站模板
宠物咖啡馆-宠物咖啡馆平台-宠物咖啡馆平台源码-宠物咖啡馆平台java代码-宠物咖啡馆平台设计与实现-基于springboot的宠物咖啡馆平台-基于Web的宠物咖啡馆平台设计与实现-宠物咖啡馆网站-宠物咖啡馆网站源码-宠物咖啡...