建造者模式-游戏角色.doc_第1页
建造者模式-游戏角色.doc_第2页
建造者模式-游戏角色.doc_第3页
建造者模式-游戏角色.doc_第4页
建造者模式-游戏角色.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

完整解决方案 Sunny公司开发人员决定使用建造者模式来实现游戏角色的创建,其基本结构如图8-3所示:图7-1 游戏角色创建结构图 在图7-1中,ActorController充当指挥者,ActorBuilder充当抽象建造者,HeroBuilder、AngelBuilder和DevilBuilder充当具体建造者,Actor充当复杂产品。完整代码如下所示:/Actor角色类:复杂产品,考虑到代码的可读性,只列出部分成员属性,且成员属性的类型均为String,真实情况下,有些成员属性的类型需自定义class Actor private String type; /角色类型 private String sex; /性别 private String face; /脸型 private String costume; /服装 private String hairstyle; /发型 public void setType(String type) this.type = type; public void setSex(String sex) this.sex = sex; public void setFace(String face) this.face = face; public void setCostume(String costume) this.costume = costume; public void setHairstyle(String hairstyle) this.hairstyle = hairstyle; public String getType() return (this.type); public String getSex() return (this.sex); public String getFace() return (this.face); public String getCostume() return (this.costume); public String getHairstyle() return (this.hairstyle); /角色建造器:抽象建造者abstract class ActorBuilder protected Actor actor = new Actor(); public abstract void buildType(); public abstract void buildSex(); public abstract void buildFace(); public abstract void buildCostume(); public abstract void buildHairstyle(); /工厂方法,返回一个完整的游戏角色对象 public Actor createActor() return actor; /英雄角色建造器:具体建造者class HeroBuilder extends ActorBuilder public void buildType() actor.setType(英雄); public void buildSex() actor.setSex(男); public void buildFace() actor.setFace(英俊); public void buildCostume() actor.setCostume(盔甲); public void buildHairstyle() actor.setHairstyle(飘逸); /天使角色建造器:具体建造者class AngelBuilder extends ActorBuilder public void buildType() actor.setType(天使); public void buildSex() actor.setSex(女); public void buildFace() actor.setFace(漂亮); public void buildCostume() actor.setCostume(白裙); public void buildHairstyle() actor.setHairstyle(披肩长发); /恶魔角色建造器:具体建造者class DevilBuilder extends ActorBuilder public void buildType() actor.setType(恶魔); public void buildSex() actor.setSex(妖); public void buildFace() actor.setFace(丑陋); public void buildCostume() actor.setCostume(黑衣); public void buildHairstyle() actor.setHairstyle(光头); 指挥者类ActorController定义了construct()方法,该方法拥有一个抽象建造者ActorBuilder类型的参数,在该方法内部实现了游戏角色对象的逐步构建,代码如下所示:/游戏角色创建控制器:指挥者class ActorController /逐步构建复杂产品对象 public Actor construct(ActorBuilder ab) Actor actor; ab.buildType(); ab.buildSex(); ab.buildFace(); ab.buildCostume(); ab.buildHairstyle(); actor=ab.createActor(); return actor; 为了提高系统的灵活性和可扩展性,我们将具体建造者类的类名存储在配置文件中,并通过工具类XMLUtil来读取配置文件并反射生成对象,XMLUtil类的代码如下所示:import javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXException;import java.io.*;class XMLUtil/该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象 public static Object getBean() try /创建文档对象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File(config.xml); /获取包含类名的文本节点 NodeList nl = doc.getElementsByTagName(className); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); /通过类名生成实例对象并将其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; catch(Exception e) e.printStackTrace(); return null; 配置文件config.xml中存储了具体建造者类的类名,代码如下所示: AngelBuilder 编写如下客户端测试代码:class Client public static void main(String args) ActorBuilder ab; /针对抽象建造者编程 ab = (ActorBuilder)XMLUtil.getBean(); /反射生成具体建造者对象 ActorController ac = new ActorController(); Actor actor; actor = ac.construct(ab); /通过指挥者创建完整的建造者对象 String type = actor.getType(); System.out.println(type + 的外观:); System.out.println(性别: + actor.getSex(); System.out.println(面容: + actor.getFace(); System.out.println(服装: + actor.getCostume(); System.out.println(发型: + actor.getHairstyle(); 编译并运行程序,输出结果如下:天使的外观:性别:女面容:漂亮服装:白裙发型:披肩长发 在建造者模式中,客户端只需实例化指挥者类,指挥者类针对抽象建造者编程,

温馨提示

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

评论

0/150

提交评论