[关键字]:java,design pattern,设计模式,《Java与模式》学习,Flyweight Pattern,享元模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
[正文]:
一个单纯享元的例子:咖啡摊(Coffee Stall)
package pattern.flyweight.coffee.stall;
import java.util.*;
/**
* 一个单纯享元的例子
* 咖啡摊:Coffee Stall
* @version 2009-6-25
* @author Winty(wintys@gmail.com)
*/
public class CoffeeStallTest{
public static void main(String[] args){
FlavorFactory f = FlavorFactory.getInstance();
Order o1,o2,o3;
o1 =f.factory("Black Coffee");
o2 = f.factory("Espresso");
o3 = f.factory("Black Coffee");
o1.serve();
o2.serve();
o3.serve();
f.checkFlyweight();
}
}
/**
* 抽象享元角色
*/
abstract class Order{
public abstract void serve();
public abstract String getFlavor();
}
/**
* 具体享元角色
*/
class Flavor extends Order{
private String flavor;//内蕴状态
public Flavor(String flavor){
this.flavor = flavor;
}
@Override
public void serve(){
System.out.println("serve " + flavor);
}
@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);
}
}
}
运行结果:
serve Black Coffee
serve Espresso
serve Black Coffee
check flyweight:
key:Black Coffee
key:Espresso
- 大小: 45.4 KB
分享到:
相关推荐
在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立的内存空间。 享元模式由以下几个关键角色组成: 1. **享元接口(Ingredients)**: 定义了享元对象的基本行为,如获取...
咖啡店无线组网实训 本实训旨在让学生了解无线局域网的组网模式和协议,掌握无线局域网的配置,掌握 PPPoE 的配置。通过本实训,学生将学习如何设计和配置无线局域网,如何使用 WDS 桥接方式连接多个路由器,如何...
宠物咖啡馆-宠物咖啡馆平台-宠物咖啡馆平台源码-宠物咖啡馆平台java代码-宠物咖啡馆平台设计与实现-基于springboot的宠物咖啡馆平台-基于Web的宠物咖啡馆平台设计与实现-宠物咖啡馆网站-宠物咖啡馆网站源码-宠物咖啡...
宠物咖啡馆-宠物咖啡馆平台-宠物咖啡馆平台源码-宠物咖啡馆平台java代码-宠物咖啡馆平台设计与实现-基于springboot的宠物咖啡馆平台-基于Web的宠物咖啡馆平台设计与实现-宠物咖啡馆网站-宠物咖啡馆网站源码-宠物咖啡...
微信静态模板---咖啡网站模板
此外,模板采用了二栏布局,这是常见的网页设计模式,通常包括主要内容区域和侧边栏。在HTML中,可以使用`<div>`标签创建这两个栏,并通过CSS进行定位和尺寸设置。例如,`main`部分可以设为`width: 70%; float: left...
在准备一份像“创业计划书-奶茶咖啡甜品蛋糕面包-call-coffee-咖啡创业计划书”这样的项目提案时,你需要全面考虑多个关键知识点,确保你的计划具有吸引力且可行性高。以下是一些重要的方面: 1. **市场分析**:...
call-coffee-咖啡创业计划书
深度学习-目标分类-咖啡质量分类 语言:python 目的:用于咖啡质量分类,可以作为学习参考。 内容包括:源码和数据集,部分带文章。超过十份源码。 带数据集很好运行,主页有搭建环境过程。主页有更多源码。 ...
毕业设计-咖啡网站商城javaweb 咖啡网站商城是一个结合了电子商务和在线服务的项目,非常适合作为毕业设计。这样的项目可以帮助用户在线购买咖啡豆、咖啡机和其他相关产品,并提供相关的咖啡制作技巧和食谱。以下是...
这种模式的核心在于装饰者和组件接口的统一,使得装饰者可以替代原对象并添加额外的功能。在"设计模式之装饰模式:以售卖咖啡为例"的场景中,我们可以详细解析其应用。 首先,咖啡的选择过程可以看作是基础产品...
基于ssm框架的java毕业设计-咖啡馆管理系统(源码+说明+演示视频) 【项目技术】 开发语言:Java 框架:ssm 架构:B/S 数据库:mysql 【实现功能】 本系统有管理员、客户及员工。 管理员:个人中心、客户管理、员工...
创业计划书-奶茶咖啡甜品蛋糕面包-咖啡蛋糕店创业计划书
其新零售模式主要体现在几个方面:首先是高度的门店管控,包括人员管理、租金控制等,以确保原材料的高质量,从而提供高性价比的咖啡产品;其次是其独特的差异化战略,它专注于在人流密集区域快速开店,同时不完全...
旺店-咖啡厅管理2019V1.0