资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
完整解决方案 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.hairpublic 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 ob
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号