基于设计模式的学习之旅-----享元模式(附源码)

        基于设计模式的学习之旅-----享元模式

1、 初始享元模式

大家知道围棋是啥样子的,一个棋盘,其他的是黑白色的棋子各一盒两队手PK手执一色棋,每人一步,轮流放置到棋盘不同的坐标上。

要求大家用程序设计出一套这样的游戏,考虑如何设计比较好。

 

方案1棋子的类,里面有所有属性,颜色,位置坐标等。每次放置棋子到棋盘的时候new出一对象。

方案2:分析棋子的特性,发现:棋子颜色只有两种(黑白棋子位置一直在动态变化之中。将颜色定义为固有属性,将位置坐标定义为外部属性。通过一个工厂,内部有个集合存储两种棋子(黑白每次放置棋子到棋盘的时候从工厂中拿到对象,然后将动态坐标通过关联方式加载棋子中。

第一种方案:棋子对象将无休止新增

第二种方案:棋子对象只存在2

2、 什么是享元模式

运用共享技术有效地支持大量细粒度的对象。

3、 模式结构图

4模式代码事例

41涉及到的类,以及类图

ChessFlyWeightFactory

ConcreteChessFlyWeight

IChessFlyWeight

Point

PatternRun

42具体的代码实现

43事例输出结果

5、模式参与者

F l y w e i g h tIChessFlyWeight

C o n c r e t e F l y w e i g hConcreteChessFlyWeight 

U n s h a r e d C o n c r e t e F l y w e i g h t

F l y w e i g h t F a c t o r yChessFlyWeightFactory

OutAttributePoint

6模式优缺点

A、可以避免大量相似类的开销,从而节省内存空间

B、统一管理相似类的共性,有利于维护

C通过区分内部外部状态来处理特殊的需求

7模式适用性

A一个应用程序使用了大量的对象

B完全由于使用大量的对象,造成很大的存储开销

C对象的大多数状态都可变为外部状态

D、如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象

E、应用程序不依赖于对象标识。由于F l y w e i g h t对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值

 

 

点击下载“文档以及源码下载

 

欢迎转载,请注明出处“http://www.cnblogs.com/luxiaofeng54/archive/2013/04/06/3002649.html

 

 

posted on   陆晓峰  阅读(1337)  评论(2编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

< 2013年4月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4
5 6 7 8 9 10 11
点击右上角即可分享
微信分享提示