[关键字]: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
分享到:
相关推荐
12. **享元模式**:运用共享技术有效地支持大量细粒度的对象,减少内存占用。如计算机内存管理中的字面量共享。 13. **责任链模式**:避免将处理逻辑硬编码到对象中,让多个对象都有机会处理请求。例如,企业的审批...
内容概要:本文介绍了AI绘画工具Craiyon,它由Google和Hugging Face研究人员开发,是DALL-E mini的后续版本。Craiyon以其简便的操作、强大的创意激发能力和快速生成图像的特点受到欢迎。用户只需简单输入文字描述,Craiyon即可生成图像,极大地降低了绘画门槛。文章还探讨了Craiyon面临的挑战,包括版权争议、图像质量提升空间和艺术本质的讨论。最后,展望了Craiyon在教育、商业等领域的应用前景,强调其在未来创意和科技融合中的重要性。 适合人群:适合所有对AI绘画感兴趣的用户,尤其是零基础的艺术爱好者、设计师以及需要快速生成创意图像的专业人士。 使用场景及目标:①帮助设计师突破创意瓶颈,快速生成设计草图;②为普通用户提供实现梦想可视化的途径;③在教育领域辅助创意启发课程,提升学生创造力和跨学科学习能力;④在商业领域加快广告设计、游戏开发等项目的创意构思和制作进程。 其他说明:尽管Craiyon存在版权争议、图像质量有待提高等问题,但其简便易用的特点使其成为初学者和创意爱好者的理想选择。未来,随着技术的进步,Craiyon有望克服现有挑战,为用户提供更高质量的服务。
实训商业源码-智慧农场 1.9.2+农业众筹投资+活动报名+智慧农场拼团 +农场乐园-论文模板.zip
实训商业源码-图片表情-论文模板.zip
实训商业源码-微信·小程序模板社交圈-论文模板.zip
实训商业源码-智慧农场小程序1.8.9-论文模板.zip
使用MFC自制的人脸识别小软件,能够实现注册登录基础功能。可以在此基础上进一步开发,实现锁屏登录等功能
实训商业源码-文件快递-论文模板.zip
基于vue+javaScript实现的订货系统供货商后台系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于vue+javaScript实现的订货系统供货商后台系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于vue+javaScript实现的订货系统供货商后台系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于vue+javaScript实现的订货系统供货商后台系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于vue+javaScript实现的订货系统供货商后台系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于vue+javaScript实现的订货系统供货商后台系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用
面试题总结一,包括常见面试题
PT7C4512-PLL时钟倍频器-中文数据手册
内容概要:本文详细介绍了使用Matlab 2022a中的Simulink工具对风轮机发电系统进行全面建模与仿真的方法。主要内容涵盖风速模型(包括基本风、阵风、阶跃风和随机风)、风力机模型(涉及叶片、轴承、发电机等组件)以及飞轮储能模块的构建。通过这些模型,可以更真实地模拟风力发电系统的动态行为,帮助研究人员和工程师更好地理解风电系统的性能特点及其优化方向。 适合人群:从事风力发电系统研究的技术人员、高校相关专业师生、对风电系统感兴趣的科研工作者。 使用场景及目标:①用于风电场的设计和优化;②评估不同风速条件下的风力机性能;③研究飞轮储能模块对电力输出稳定性的贡献。 其他说明:文中提供了完整的Simulink工程源文件和参考文献,便于读者进一步学习和应用。
实训商业源码-微商城-论文模板.zip
天狼星网络验证,一个可以注入远程分享弹窗,网络验证的工具你还在用本地注册机吗?你想拥有远程分享弹窗的功能吗?即 刻起就摆脱本地,使用网络注册机! 天狼星网络验证破解,支持一键为软件注入弹窗式网络验证,一键为软件注入全屏式网络验证,支持跳加固注入网络验证, 支持远程引流分享弹窗等等,注入后的软件还有独特的签名验证,防二改,防抓包破解 计算机技术发展到今天,很多优秀的软件已经具备了商业价值,很多软件作者希望自己的软件具有注册功能,但是传统的注册 码解决不了多人使用同一个注册码的问题,机器码(本地验证)的方式又比较容易被破解。这些问题都成为大家制作收费软件 的首要问题刀客源码。本系统就是帮助大家解决这一系列问题。如果你想保护自己的知识产权及将自己的知识产权商业化, 你就一定的试试哦。 完全免费使用用户登录、卡密管理等基本功能,无需担心收费功能影响软件使用! 节省软件成本,不需要购置服务器,登录酸酸云科技后台配置自己的应用程序相关设置,客户端直接调用远程webservices就能 实现网络验证! 缩短开发周期不需要过多的繁琐操作,调用酸酸云科技就可以实现验证机制,无需再书写验证用户登录,用户管理,卡密管理等 繁琐的代码,开发软件只要专注程序代码即可! 安全防破解将重要数据存放在服务器中,只有当客户登陆成功后才会返回相应的重要数据,就算被破解,也有盗版弹窗,也是无 法使用! 支持多程序语言开发同时支持多种程序语言,只要程序能够调用DLL的程序语言都可以调用本插件,例如:按键精灵、易语 言、C#、C++等!
实训商业源码-智慧农场V1.9.0+拼团1.0.1+报名1.0.6+众筹投资1.1.0+农场乐园1.0.2-论文模板.zip
包含常用所需的全部固件,创建工程只需要复制工程,然后写入主程序代码即可
繁忙铁路干线施工天窗与列车运行图协同优化研究_于婕.pdf_ (1)
图表效果及代码实现讲解链接:https://blog.csdn.net/zhangjiujiu/article/details/148054080
cherry-MCP相关软件包,包括cherry-MCP组件(Windows版)如uv,uvx等等,以及Cherry-Studio、cursor,node的安装包,提供给需要学习cherry-MCP相关知识的同学。
内容概要:本文详细介绍了逆变器下垂控制技术在并网和孤岛模式下的具体实现方法。首先解释了下垂控制的基本概念及其重要性,然后通过具体的代码片段展示了不同模式(如并网模式、孤岛模式)下的控制逻辑。对于并网模式,逆变器跟随电网频率,而在孤岛模式下,则依靠下垂控制调节频率和电压。此外,还讨论了并联运行时可能出现的问题以及解决方案,如功率跷跷板现象和相应的滤波处理。最后,文章强调了实际调试过程中的一些经验和技巧,如动态调整下垂系数以应对不同负载情况。 适合人群:从事电力电子、微电网研究的技术人员,尤其是对逆变器下垂控制感兴趣的工程师。 使用场景及目标:适用于需要理解和实现逆变器下垂控制的工程项目,帮助工程师掌握如何在不同环境下配置和优化逆变器性能。 其他说明:文中提供了多个编程语言的实际代码示例,包括Python、C和Matlab,有助于读者更好地理解理论与实践的结合。同时,作者分享了许多来自真实项目的宝贵经验,使读者能够避免常见的错误和技术陷阱。