`
shake863
  • 浏览: 642111 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Design Patterns in ActionScript-Flyweight

阅读更多

In Action Script 3.0 we have the following ways to define a String.

  1. var str1 : String = new String ( foo ) ;
  2. var   str2 : String = “ foo ”;
  3. var   str3 : String = String ( foo ) ;

I don’t know which way is your way, but they work the same way. Actually, all of the three String variables point to the same String object in memory. That’s to say there is only one copy of “foo” object in the memory, but three references. In other languages, such as java, are almost the same. It saves the memory. This is called object pool. And there is a similar pattern called Flyweight.

Let’s take a look at its intent.

 

 

Use sharing to support large numbers of fine-grained objects efficiently.

– By THE GOF BOOK

Do you remember the Red Alert, when I played this game with my friends; we often made many tanks, and just one or two types.

If you’re the designer of the Red Alert, what will you do? Write a tank class, and let the concrete tank inherit it. Then when the player made one, get a corresponding object in the memory. This is a solution, but maybe not a good one, because it will take many memories and the memory is a scarce resource, so, we need to fix it.

The concrete tank shares the same model. The difference is just the coordinate and the direction. If we abstract these attributes, then a kind of concrete tank can share the same object, which just including the model.

So, we create a ExtrinsicState class for the extrinsic attributes, and create a Tank interface, and let the concrete tank implements it. The concrete tank class will only have the intrinsic attributes. Note that some operations will need the extrinsic state.

So, the class diagram will be as follows.

clip_image001

And in the tank factory, we produce the concrete tank, but not always create the concrete tank; you can see the following code.

  1. public static function getTank ( key : String ) : Tank
  2. {
  3. if ( tankList [ key ] == null )
  4. {
  5. if ( key == “ Guardian )
  6. tankList [ key ] = new   GuardianTank () ;
  7. else   if ( key == “ Apocalypse )
  8. tankList [ key ] = new   ApocalypseTank () ;
  9. }
  10.  
  11. return   Tank ( tankList [ key ]) ;
  12. }

We use a tankList to hold the objects we have created, so, when the user wants a tank that we’ve already created, just return it, not need to create again.

Of course, when we do some operations, we may need the extrinsic state, so, pass the extrinsic state as a parameter, and then we get different appearance of each tank. Download Download Full Project

Enjoy!

分享到:
评论

相关推荐

    基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

    【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

    六一儿童节快乐!(六一儿童节庆祝代码)Vue开发

    六一儿童节快乐!(六一儿童节庆祝代码)Vue开发 like Project setup npm install Compiles and hot-reloads for development npm run serve Compiles and minifies for production npm run build Lints and fixes files npm run lint Customize configuration

    uniapp聊天工具源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    NX二次开发uc1603 函数介绍

    NX二次开发uc1603 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,还是希望提高工作效率的普通用户,NX 二次开发 Ufun 都可以帮助您实现更高效的工作流程。函数覆盖了 NX 软件的各个方面,包括但不限于建模、装配、制图、编程、仿真等。这些 API 函数可以帮助用户轻松地实现自动化、定制化和扩展 NX 软件的功能。例如,用户可以通过 Ufun 编写脚本,自动化完成重复性的设计任务,提高设计效率;或者开发定制化的功能,满足特定的业务需求。语法简单易懂,易于学习和使用。用户可以快速上手并开发出符合自己需求的 NX 功能。本资源内容 提供了丰富的中英文帮助文档,可以帮助用户快速了解和使用 Ufun 的功能。用户可以通过资源中的提示,学习如何使用 Ufun 的 API 函数,以及如何实现特定的功能。

    【目标检测数据集】遥感类军用飞机检测数据集3800张20类别VOC+YOLO格式.zip

    【目标检测数据集】遥感类军用飞机检测数据集3800张20类别VOC+YOLO格式.zip 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3821 标注数量(xml文件个数):3821 标注数量(txt文件个数):3821 标注类别数:20 标注类别名称:["A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","A13","A14","A15","A16","A17","A18","A19","A20"] 每个类别标注的框数: A1 框数 = 1646 A2 框数 = 1726 A3 框数 = 1164 A4 框数 = 642 A5 框数 = 1262 A6 框数 = 436 A7 框数 = 680 A8 框数 = 944 A9 框数 = 1073 A10 框数 = 924 A11 框数 = 501 A12 框数 = 702 A13 框数 = 1652 A14 框数 = 177

    grpcio-1.64.0-cp38-cp38-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Kan网络pytorch的实现

    权重替换:KAN网络通过将权重参数替换为可学习的单变量函数,提高了网络的性能和可解释性。这种设计使得KAN网络在准确性和可解释性方面优于传统的多层感知器(MLP)。 激活函数位置:与传统的MLP不同,KAN网络中的激活函数位于网络的“边”(即权重)上,而不是节点上。这使得KAN网络能够更灵活地调整每个连接上的激活函数,从而提高模型的表示能力。 非线性核函数:KAN网络可以使用非线性核函数来替代MLP“边”上的线性函数,进一步增强了模型的非线性处理能力。 逼近精度:KAN网络可以设定细粒度的结点(Knot)来提高逼近精度,这使得KAN网络在处理复杂任务时能够获得更高的准确度。 KAN网络的数学理论基础主要来自于Kolmogorov-Arnold表示定理。该定理指出,任意一个多变量连续函数都可以表示为有限数量的单变量连续函数的两层嵌套加法的形式。KAN网络正是基于这一定理,通过将多元函数的学习转化为对一组单变量函数的学习,提高了模型的表达能力和计算效率。

    MySQL的performance-schema详解.md

    MySQL的performance_schema详解.md

    基于python的运动员数据分析源码.zip

    基于python的运动员数据分析源码.zip 基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip基于python的运动员数据分析源码.zip

    数字图像处理-实验一:采样与量化.rar

    内容概要: 这份资源是一份关于“图像的采样与量化”的实验文档,详细记录了在MATLAB环境下进行图像处理的实验过程。文档中介绍了实验的目的、内容、所需仪器与设备,以及实验原理,包括采样和量化的基本概念和它们在图像处理中的重要性。此外,还提供了MATLAB代码示例,展示了如何对图像进行不同程度的采样和量化,并分析了实验结果。 适用人群: 本文档适用于学习数字图像处理的大学生、研究生,以及相关专业的研究人员和开发人员。特别是对MATLAB编程和图像处理技术感兴趣的初学者,可以通过这份文档快速入门并理解图像采样与量化的基本原理。 使用场景及目标: 在学术教学中,作为图像处理课程的实验教材或辅助资料。 作为自学者的实践指南,帮助学习者通过动手实践来掌握图像采样和量化的技能。 为研究人员提供图像处理技术的理论基础和编程实践,以支持更高级的研究工作。

    基于云函数的小程序-初恋.rar

    基于云函数的小程序-初恋.rar

    V4L2示例代码,测试通过

    V4L2示例代码

    机器学习数据 (1).xlsx

    机器学习数据 (1)

    MATLAB是一种高级的编程语言和交互式环境

    matlab仿真

    猫狗动物声音模拟器微信小程序源码带流量主

    这是一款声音模拟器准确说是猫和狗的声音模拟器 该款小程序也就没有后端了 使用方法 直接用微信开发者工具打开源码上传提交审核即可 无需过段复杂的过程,文字图片那些都可以自行修改啥的

    基于matlab的甲状腺超声图像预处理程序-计算机专业精品课程设计

    该程序是一个数据预处理的模板,它可以生成任意图像对应的二值图。 本代码以甲状腺结节知名数据集DDTI为例子。 代码运行后,你会得到两个文件夹和一个cvs文件: - 这两个文件夹名为 `stage1` 和 `stage2`, 文件夹`stage1`中的数据用于训练第一个网络,该网络包含预处理后的图像,没有不相关区域; `stage2`用于训练第二个网络,该网络包含扩展ROI的图像 - 名为 `train.csv`的cvs文件是下面的这种数据格式,结节的大小是将预处理后的图像统一为256x256像素后,结节的像素数。

    Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar

    Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar Java开发案例-springboot-20-整合Forest实现调用第三方接口-源代码+文档.rar

    科帮网javaWeb计算机配件报价系统项目.zip

    科帮网javaWeb计算机配件报价系统项目

    深度学习之yolov10目标检测onnx模型之yolov10l.onnx

    yolo目标检测onnx模型

    android网络视频播放器.zip

    android studio android网络视频播放器 android网络视频播放器 android网络视频播放器

Global site tag (gtag.js) - Google Analytics