享元模式在围棋游戏中的应用分析.doc_第1页
享元模式在围棋游戏中的应用分析.doc_第2页
享元模式在围棋游戏中的应用分析.doc_第3页
享元模式在围棋游戏中的应用分析.doc_第4页
享元模式在围棋游戏中的应用分析.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

享元模式在围棋游戏中的应用分析摘要:本文应用对象的分析方法对围棋游戏从需求功能分析、对象职责分析、类图的设计以及代码设计几个方面进行阐述,说明了模式享元的使用实例,它有节约存储空间,提高系统性能的优点。关键词:设计模式;UML1引言Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多,本文将用一个实例说明这个模式的具体应用。2 围棋系统的分析21 围棋的功能说明围棋中有黑白两种棋子,在程序中每个棋子的属性主要有坐标和颜色。在围棋系统中只需要记录棋盘上每个子的坐标颜色即可,然后通过围棋的算法来计算游戏的输赢。22 对象极其职责分配 功能由factory对象、chess对象等合作实现,factory对象负责生产chess,chess对象负责显示和获取棋子,对象的协作图如图所示。23 类图设计根据以上的对象及其职责分析,可以做出类图设计如图所示。3 围棋游戏的详细设计围棋游戏的详细设计代码如下:class IgoChessmanFactory private static IgoChessmanFactory instance = new IgoChessmanFactory();private static Hashtable ht; /使用Hashtable来存储享元对象,充当享元池private IgoChessmanFactory() ht = new Hashtable();IgoChessman black,white;black = new BlackIgoChessman();ht.put(b,black);white = new WhiteIgoChessman();ht.put(w,white); /返回享元工厂类的唯一实例public static IgoChessmanFactory getInstance() return instance; /通过key来获取存储在Hashtable中的享元对象public static IgoChessman getIgoChessman(String color) return (IgoChessman)ht.get(color);/围棋棋子类:抽象享元类abstract class IgoChessman public abstract String getColor();public void display(Coordinates coord)System.out.println(棋子颜色: + this.getColor() + ,棋子位置: + coord.getX() + , + coord.getY() );/白色棋子类:具体享元类class WhiteIgoChessman extends IgoChessman public String getColor() return 白色;/黑色棋子类:具体享元类class BlackIgoChessman extends IgoChessman public String getColor() return 黑色;/坐标类:外部状态类class Coordinates private int x;private int y;public Coordinates(int x,int y) this.x = x;this.y = y;public int getX() return this.x;public void setX(int x) this.x = x;public int getY() return this.y;public void setY(int y) this.y = y;/测试程序public class Chess /* * param args the command line arguments */public static void main(String args) IgoChessman black1,black2,black3,white1,white2;IgoChessmanFactory factory; /获取享元工厂对象factory = IgoChessmanFactory.getInstance(); /通过享元工厂获取三颗黑子black1 = factory.getIgoChessman(b);black2 = factory.getIgoChessman(b);black3 = factory.getIgoChessman(b);System.out.println(判断两颗黑子是否相同: + (black1=black2); /通过享元工厂获取两颗白子white1 = factory.getIgoChessman(w);white2 = factory.getIgoChessman(w);System.out.println(判断两颗白子是否相同: + (white1=white2); /显示棋子,同时设置棋子的坐标位置black1.display(new Coordinates(1,2);black2.display(new Coordinates(3,4);black3.display(new Coordinates(1,3);white1.display(new Coordinates(2,5);white2.display(new Coordinates(2,4); 4 设计与享元模式的关系分析围棋游戏系统的实现使用了享元模式,享元模式的类图如图所示。与本设计的对应关系:本应用的类和模式类图中的类的对应。本例中,IgoChessmanFactory与模式中FlyweightFactory相对应;IgoChessman与模式中Flyweight相对应;BlackIgoChessman和WhiteIgoChessman是对IgoChessman的实例化所以与ConcreteFlyweight相对应。5 结论本应用的实现使用了享元模式,达到了对象数量的减少从而降低了系统运行代价,节约了内存使用空间,实现了对这些相同或者相似对象的共享访问的目的。参考文献1Paul J.Perron,et al著 张志伟等译 J2EE 构建企业系统专家级解决方案 清华大学出版社2MDA Guide Version 1.0.1 /docs/omg/03-06-01.pdf3Model Driven Development for J2EE Utilizing a Model Driven Architecture (MDA) Approach Productivity Analysis /mda/mda_files/MDA_Comparison-TMC_final.pdf4MDE User Guide Metanology Corporation /5MDA Success Story BankHOST develops Gateway using Model Driven Architecture/mda/mda_files/Metanology-BankHOSTstory.htm6MetaObjectFacilit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论