近些年,游戏《王者荣耀》受到很多玩家的喜欢。某软件公司决定开发一款类似的网络游戏。游戏玩家可以在游戏中选择一个特定角色,比如战士、法师、射手、刺客等;不同的角色具有不同的能力。游戏游戏的一个重要组成部分,需要对游戏角色进行设计,而且随着该游戏版本的迭代升级将,不断增加新的角色。不同类型的游戏角色,其姓名、技能、皮肤、服装等外部特性都有所差异。其中游戏角色的类及属性设置如下图所示:
某软件公司决定开发一个小工具来创建游戏角色,可以创建不同类型的角色并可以灵活也增加新的角色。请使用生成器模式实现游戏角色的创建。给出生成器模式类图以及对应程序代码。
对于示例的 Java 代码,本实验需要完成如下图所示的 java 代码:
其中:
Role.java 为游戏角色类,是产品类。
RoleBuilderDirector.java为指挥者类。
RoleBuilder.java 抽象构建接口。
AssasinBuilder.java、WinzardBuilder.java 等为具体产品建造类
Client.java为客户端测试类。
注意:可以自行设计游戏角色类别和构建类。不一定是图中所给的三种角色类别的构建类。
答案举例:
public class Role
{
private String Name;
private String Skill;
private String Skin;
private String constume;
public.Role(RoleBuiler builder)
{
this.Name = builder.Name;
this.Skill = builder.Skill;
this.Skin = builder.Skin;
this.constume = builder.constume;
}
}
public static class RoleBuilder
{
private String Name;
private String Skill;
private String Skin;
private String constume;
public RoleBuiler(String Name,String Skill,String Skin,String constume)
{
this.Name = Name;
this.Skill = Skill;
this.Skin = Skin;
this.constume = constume;
}
public Role build()
{
return new Role(this);
}
}
class RoleBuilderDirector
{
public Role construct(RoleBuilder ab)
{
Role actor;
ab.buildName();
ab.buildSkill();
ab.buildSkin();
ab.buildcostume();
role=ab.createRole();
return role;
}
}
class WinzardBuilder extends RoleBuilder
{
public void buildName()
{
actor.setName("fzq");
}
public void buildSkill()
{
actor.setSkill("lbwnb");
}
public void buildSkin()
{
actor.setSkin("superfzq");
}
public void buildcostume()
{
actor.setcostume("黑衣");
}
}
class RiderBuilder extends RoleBuilder
{
public void buildName()
{
actor.setName("zxz");
}
public void buildSkill()
{
actor.setSkill("lmy");
}
public void buildSkin()
{
actor.setSkin("superzxz");
}
public void buildcostume()
{
actor.setcostume("黑衣");
}
}
class AssasinBuilder extends RoleBuilder
{
public void buildName()
{
actor.setName("xhy");
}
public void buildSkill()
{
actor.setSkill("rnmtq");
}
public void buildSkin()
{
actor.setSkin("superxhy");
}
public void buildcostume()
{
actor.setcostume("黑衣");
}
}
class Client
{
public static void main(String args[])
{
RoleBuilder ab;
ab = (RoleBuilder)XMLUtil.getBean();
RoleBuilderDirector ac = new RoleController();
Role actor;
actor = ac.construct(ab);
String type = actor.getType();
System.out.println(type + "的职业:");
System.out.println("姓名:" + actor.getName());
System.out.println("技能:" + actor.getSkill());
System.out.println("皮肤:" + actor.getSkin());
System.out.println("服装:" + actor.getcostume());
}
}