0

我想用装饰器设计模式给我的角色一个角色(如司机、枪手等)。并非每个角色都需要所有技能,只是其中一些技能(例如,犯罪伙伴只需要 Startegy)。但是当我想创建不同的角色时,程序崩溃了。(我稍后根据用户的决定将我的角色提供给确切的装饰者。他选择角色的成员)例如,这里我只需要来自的策略技能成员类(因为犯罪伙伴只使用那个)。但是当我创建 EnumMap 时它不起作用。如何解决这个问题呢 ?

///成员类

import java.util.*;

public class Member implements Partner{
    String Name;

    int Share;
    //Creating the enum for the skills
    public static enum Skill {
        DRIVE, VEHICLE, ACCURACY, WEAPONS, REFLEX, STRATEGY, CHARISMA, HACKING, SPEED, STEALTH;

        public static Integer valueOf(Skill skill) {
            // TODO Auto-generated method stub
            return Member.skills.get(skill);
        }
    }
    //Creating an EnumMap to store the values and the names of the skills
    static Map<Skill, Integer> skills = new EnumMap<Skill, Integer>(Skill.class);
    Random r = new Random();
    //Constructor
    public Member(String Name) {
        this.Name = Name;

        skills.put(Skill.DRIVE, r.nextInt(100));
        skills.put(Skill.VEHICLE, r.nextInt(100));
        skills.put(Skill.ACCURACY, r.nextInt(100));
        skills.put(Skill.WEAPONS, r.nextInt(100));
        skills.put(Skill.REFLEX, r.nextInt(100));
        skills.put(Skill.STRATEGY, r.nextInt(100));
        skills.put(Skill.CHARISMA, r.nextInt(100));
        skills.put(Skill.HACKING, r.nextInt(100));
        skills.put(Skill.SPEED, r.nextInt(100));
        skills.put(Skill.STEALTH, r.nextInt(100));
    }

    public Map<Skill, Integer> getSkills() {
        return skills;
    }
    public Integer getSkill(Member.Skill skill) {
        return (Integer) skills.get(Skill.valueOf(skill));
    }

    public void setSkills(String skillname, int number) {
        skills.put(Skill.valueOf(skillname), number);
    }
}

///合作伙伴接口

public interface Partner {
    //Creating the enum for the skills
    public static enum Skill {
        DRIVE, VEHICLE, ACCURACY, 
WEAPONS, REFLEX, STRATEGY, CHARISMA, HACKING, SPEED, STEALTH;
    }


}

///角色装饰类

public class RoleDecorator implements Partner {
    protected Partner DecoratedPartner;
    public RoleDecorator(Partner DecoratedPartner){
        this.DecoratedPartner=DecoratedPartner;
    }   

}

////PartnerInCrime 类这里有问题...

import java.util.*;



public class PartnerInCrime extends RoleDecorator {
    Member.Skill STRATEGY;
    Random r = new Random();

     Map<Member.Skill, Integer> skill=new EnumMap<Member.Skill, Integer>(Member.Skill.class);
    public PartnerInCrime(Partner DecoratedPartner) {
        super(DecoratedPartner);
        skill.put(STRATEGY, Member.Skill.valueOf(STRATEGY));
    }



    public Map<Member.Skill, Integer> getskill() {
        return skill;
    }
}
4

0 回答 0