Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DI、Guice与战略模式_Java_Dependency Injection_Guice_Strategy Pattern - Fatal编程技术网

Java DI、Guice与战略模式

Java DI、Guice与战略模式,java,dependency-injection,guice,strategy-pattern,Java,Dependency Injection,Guice,Strategy Pattern,假设我有以下基类,Queen和Knight作为它的派生。武器行为是一个界面。我不知道如何根据具体的游戏角色类型使用Guice注入武器 public abstract class GameCharacter { @Inject protected WeaponBehaviour weapon; public GameCharacter() { } public void fight() { weapon.useWeapon();

假设我有以下基类,Queen和Knight作为它的派生。武器行为是一个界面。我不知道如何根据具体的游戏角色类型使用Guice注入武器

public abstract class GameCharacter {
    @Inject
    protected WeaponBehaviour weapon;

    public GameCharacter() {

    }

    public void fight() {
        weapon.useWeapon();
    }

    public void setWeapon(WeaponBehaviour weapon) {
        this.weapon = weapon;
    }
}
你可以用

一个子类:

class GimliSonOfGloin extends GameCharacter {

    @Inject
    public void setWeapon(@Axe WeaponBehaviour weapon) {
        super.setWeapon(weapon);
    }
}
注释:

@BindingAnnotation 
@Target({ FIELD, PARAMETER, METHOD }) 
@Retention(RUNTIME)
public @interface Axe {}
约束力:

bind(WeaponBehaviour.class)
    .annotatedWith(Axe.class)
    .to(MyAxe.class);
你可以用

一个子类:

class GimliSonOfGloin extends GameCharacter {

    @Inject
    public void setWeapon(@Axe WeaponBehaviour weapon) {
        super.setWeapon(weapon);
    }
}
注释:

@BindingAnnotation 
@Target({ FIELD, PARAMETER, METHOD }) 
@Retention(RUNTIME)
public @interface Axe {}
约束力:

bind(WeaponBehaviour.class)
    .annotatedWith(Axe.class)
    .to(MyAxe.class);

每个角色类型是否只有一种使用的武器类型?应在实例化时注入配置的默认武器类型,但是它也可以在运行时通过基类的setter进行更改。每个角色类型是否只有一种它使用的武器类型?配置的默认武器类型应该在实例化时注入,但也可以在运行时通过基类的setter进行更改。