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

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

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 2013-04-06 17:00  陆晓峰  阅读(1337)  评论(2编辑  收藏  举报

导航