目录
一、问题描述
二、问题分析
三、UML图
四、代码实现
五、实验结果截图
六、结尾语
一、问题描述
设计一个游戏角色创建系统,角色有性别之分:男性 (Man)和女性(Female);有种族之分:人类 (Human)、矮人 (Dwarf)、兽人 (Orc)、牛头人(Tauren);有职业之分:战士 (Warrior)、法师(Mage)、牧师(Priest)、猎人(Hunter)。
二、问题分析
采用桥接模式,相信智慧的你已经在课本上或者其他途径学习了桥接模式,课本上的栗子就是画笔pen和颜色color进行桥接,而这是两个维度的。在本题中有性别,种族,职业三个维度,我们将将职业与种族桥接,种族与性别桥接,性别作为"桥头"。
三、UML图
四、代码实现
1)客户端类
import java.util.Scanner; public class Client { public static void main(String[] args){ Procession procession; Race race; Sex sex; // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int choice; System.out.println("现在开始创建角色,请选择您想要创建角色的性别:\n1.男性 2.女性"); choice = sc.nextInt(); switch (choice){ case 1->sex = new Man(); case 2->sex = new Female(); default -> throw new RuntimeException("不存在的性别"); } System.out.println("请选择角色的种族"); System.out.println("1.人类 2.矮人 3.兽人 4.牛头人"); choice = sc.nextInt(); switch (choice){ case 1->race = new Human(); case 2->race = new Dwarf(); case 3->race = new Orc(); case 4->race = new Tauren(); default -> throw new RuntimeException("不存在此种族选择"); } System.out.println("请选择角色的职业"); System.out.println("1.战士 2.法师 3.牧师 4.猎人"); choice = sc.nextInt(); switch (choice){ case 1->procession = new Warrior(); case 2->procession = new Mage(); case 3->procession = new Priest(); case 4->procession = new Hunter(); default -> throw new RuntimeException("不存在此职业选择"); } // System.out.println("进入创建方法"); // procession = (Procession) XMLUtil.getBean("Procession"); // race = (Race) XMLUtil.getBean("Race"); // sex = (Sex) XMLUtil.getBean("Sex"); sex.setRace(race); race.setProcession(procession); sex.createLife(); } }
讯享网
2)性别Sex
讯享网public abstract class Sex { public Race race; public void setRace(Race race){ this.race = race; } public abstract void createLife(); }
3)种族Race
public abstract class Race { public Procession procession; public void setProcession(Procession procession){ this.procession = procession; } public abstract void races(String sex); }
4)职业Procession
讯享网public abstract class Procession { public abstract void releaseSkills(String sex, String raceName); }
5)具体子类Warrior(战士)

import java.util.Scanner; public class Warrior extends Procession{ Scanner sc = new Scanner(System.in); // String skillResult;//释放技能后的效果,根据不同的技能名来匹配 @Override public void releaseSkills(String sex, String raceName) { String processionName = "战士"; String skillName; System.out.println("英勇无畏的战士啊,您已经学会的技能如下,请选择您想要释放的技能:"); System.out.println("1.英勇飞跃 2.大地崩击 3.顺劈砍"); int choose = sc.nextInt(); switch (choose){ case 1:skillName = "英勇飞跃";break; case 2:skillName = "大地崩击";break; case 3:skillName = "顺劈砍";break; default:throw new RuntimeException("您还未学会其他的技能呢,请再接再励吧!"); } System.out.println(sex+raceName+processionName+"释放了技能"+skillName); } }
6)具体子类Mage(法师)
讯享网import java.util.Scanner; public class Mage extends Procession{ Scanner sc = new Scanner(System.in); // String skillResult;//释放技能后的效果,根据不同的技能名来匹配 @Override public void releaseSkills(String sex, String raceName) { String processionName = "法师"; String skillName; System.out.println("智冠天下的法师啊,您已经学会的技能如下,请选择您想要释放的技能:"); System.out.println("1.浩劫水啸 2.心灵之涟 3.空间律动"); int choose = sc.nextInt(); switch (choose){ case 1:skillName = "海啸天击";break; case 2:skillName = "心灵之涟";break; case 3:skillName = "空间律动";break; default:throw new RuntimeException("您还未学会其他的技能呢,请再接再励吧!"); } System.out.println(sex+raceName+processionName+"吟唱技能"+skillName); } }
7)具体子类Priest(牧师)
import java.util.Scanner; public class Priest extends Procession{ Scanner sc = new Scanner(System.in); // String skillResult;//释放技能后的效果,根据不同的技能名来匹配 @Override public void releaseSkills(String sex, String raceName) { String processionName = "牧师"; String skillName; System.out.println("仁慈宽厚的牧师啊,您已经学会的技能如下,请选择您想要释放的技能:"); System.out.println("1.圣光之盾 2.治愈之光 3.绝望祷言"); int choose = sc.nextInt(); switch (choose){ case 1:skillName = "圣光之盾";break; case 2:skillName = "治愈之光";break; case 3:skillName = "绝望祷言";break; default:throw new RuntimeException("您还未学会其他的技能呢,请再接再励吧!"); } System.out.println(sex+raceName+processionName+"开始吟唱技能"+skillName); } }
8)具体子类Hunter(猎人)
讯享网import java.util.Scanner; public class Hunter extends Procession{ Scanner sc = new Scanner(System.in); // String skillResult;//释放技能后的效果,根据不同的技能名来匹配 @Override public void releaseSkills(String sex, String raceName) { String processionName = "猎人"; String skillName; System.out.println("机智勇敢的猎人啊,您已经学会的技能如下,请选择您想要释放的技能:"); System.out.println("1.隐秘之阱 2.鹰之守护 3.致命枪决"); int choose = sc.nextInt(); switch (choose){ case 1:skillName = "隐秘之阱";break; case 2:skillName = "鹰之守护";break; case 3:skillName = "致命枪决";break; default:throw new RuntimeException("您还未学会其他的技能呢,请再接再励吧!"); } System.out.println(sex+raceName+processionName+"发动技能"+skillName); } }
9)具体子类Human(人类)
public class Human extends Race{ @Override public void races(String sex) { String raceName = "人类"; this.procession.releaseSkills(sex,raceName); } }
10)具体子类Dwarf(矮人)
讯享网public class Dwarf extends Race{ @Override public void races(String sex) { String raceName = "矮人"; this.procession.releaseSkills(sex,raceName); } }
11)具体子类Orc(兽人)
public class Orc extends Race{ @Override public void races(String sex) { String raceName = "兽人"; this.procession.releaseSkills(sex,raceName); } }
12)具体子类Tauren(牛头人)
讯享网public class Tauren extends Race{ @Override public void races(String sex) { String raceName = "牛头人"; this.procession.releaseSkills(sex,raceName); } }
13)具体子类Female(女性)
public class Female extends Sex{ @Override public void createLife() { String sex = "女性"; this.race.races(sex); } }
14)具体子类Man(男性)
讯享网public class Man extends Sex{ @Override public void createLife() { String sex = "男性"; this.race.races(sex); } }
五、实验结果截图


六、结尾语
程序放在同一目录下就能运行,不过还是有一些不足,一是并没有使用xml,XMLUtil这些来实现。二是后面那个创建功能并没有起到应有的预期结果,虽然对整个实验没什么区别。不多说了,去上课啦,希望多多交流。。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/26493.html