2025年设计模式实验之三维度桥接模式

设计模式实验之三维度桥接模式目录 一 问题描述 二 问题分析 三 UML 图 四 代码实现 五 实验结果截图 六 结尾语 一 问题描述 设计一个游戏角色创建系统 角色有性别之分 男性 Man 和女性 Female 有种族之分 人类 Human 矮人 Dwarf 兽人 Orc 牛头人 Tauren

大家好,我是讯享网,很高兴认识大家。

目录

一、问题描述

二、问题分析

三、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这些来实现。二是后面那个创建功能并没有起到应有的预期结果,虽然对整个实验没什么区别。不多说了,去上课啦,希望多多交流。。。

小讯
上一篇 2025-04-05 14:48
下一篇 2025-02-16 15:44

相关推荐

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