我想用装饰器设计模式给我的角色一个角色(如司机、枪手等)。并非每个角色都需要所有技能,只是其中一些技能(例如,犯罪伙伴只需要 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;
}
}