每个角色有不同的fight()方法,fight方法中首先介绍自己是谁(如输出“I’m a King!”),并调用目前武器的useWeapon()方法
角色可通过setWeapon()方法设置武器,且应在构造时通过此法初始化武器
程序的主函数可参考下述代码:
publicstaticvoidmain(String[] args){Character character =newKing();
character.fight();
character =newQueen();
character.fight();
character =newKnight();
character.fight();
character =newTroll();
character.fight();
character.setWeapon(newAxeBehavior());
character.fight();}
实验内容
关键类的源程序清单:
// Test.javapublicclassTest{publicstaticvoidmain(String[] args){Character character =newKing();
character.display();
character.fight();
character =newQueen();
character.display();
character.fight();
character =newKnight();
character.display();
character.fight();
character =newTroll();
character.display();
character.fight();
character.setWeapon(newAxeBehavior());
character.display();
character.fight();}}
//武器类// AxeBehavior.javapublicclassAxeBehaviorimplementsWeaponBehavior{@OverridepublicvoiduseWeapon(){// TODO 自动生成的方法存根System.out.println("我使用斧头");}}// BowAndArrowBehavior.javapublicclassBowAndArrowBehaviorimplementsWeaponBehavior{@OverridepublicvoiduseWeapon(){// TODO 自动生成的方法存根System.out.println("我使用弓箭");}}// KnifeBehavior.javapublicclassKnifeBehaviorimplementsWeaponBehavior{@OverridepublicvoiduseWeapon(){// TODO 自动生成的方法存根System.out.println("我使用宝剑");}}// SwordBehavior.javapublicclassSwordBehaviorimplementsWeaponBehavior{@OverridepublicvoiduseWeapon(){// TODO 自动生成的方法存根System.out.println("我使用匕首");}}
//Character的子类// King.javapublicclassKingextendsCharacter{publicKing(){
weaponBehavior=newAxeBehavior();}@Overridepublicvoiddisplay(){// TODO 自动生成的方法存根System.out.println("我是国王");}}// Queen.javapublicclassQueenextendsCharacter{publicQueen(){
weaponBehavior=newKnifeBehavior();}@Overridepublicvoiddisplay(){// TODO 自动生成的方法存根System.out.println("我是皇后");}}// Knight.javapublicclassKnightextendsCharacter{publicKnight(){
weaponBehavior=newSwordBehavior();}@Overridepublicvoiddisplay(){// TODO 自动生成的方法存根System.out.println("我是骑士");}}// Troll.javapublicclassTrollextendsCharacter{publicTroll(){
weaponBehavior=newBowAndArrowBehavior();}@Overridepublicvoiddisplay(){// TODO 自动生成的方法存根System.out.println("我是骑士");}}