样例
public interface Enchantment {void onActive();void apply();void onDeactive();
}
public class FlyingEnchantment implements Enchantment{@Overridepublic void onActive() {System.out.println("The item begins to glow faintly");}@Overridepublic void apply() {System.out.println("The item flies strikes the enemies finally returning to owner's hand");}@Overridepublic void onDeactive() {System.out.println("The items's glow fades");}
}
public class SoulEatingEnchantment implements Enchantment{@Overridepublic void onActive() {System.out.println("The item spreads bloodlust");}@Overridepublic void apply() {System.out.println("The item eats the soul of enemies");}@Overridepublic void onDeactive() {System.out.println("The item stops spreading bloodlust");}
}
public interface Weapon {void wield();void swing();void unwield();Enchantment getEnchantment();
}
public class Hammer implements Weapon{private final Enchantment enchantment;public Hammer(Enchantment enchantment) {this.enchantment = enchantment;}@Overridepublic void wield() {System.out.println("The hammer is wielded");enchantment.onActive();}@Overridepublic void swing() {System.out.println("The hammer is swinged");enchantment.apply();}@Overridepublic void unwield() {System.out.println("The hammer is unwielded");}@Overridepublic Enchantment getEnchantment() {return enchantment;}
}
public class Sword implements Weapon{private final Enchantment enchantment;public Sword(Enchantment enchantment) {this.enchantment = enchantment;}@Overridepublic void wield() {System.out.println("This sword is wielded");enchantment.onActive();}@Overridepublic void swing() {System.out.println("The sword is swinged");enchantment.apply();}@Overridepublic void unwield() {System.out.println("The sword is unwielded");enchantment.onDeactive();}@Overridepublic Enchantment getEnchantment() {return enchantment;}
}
public class Main {public static void main(String[] args) {System.out.println("The knight receives an enchanted sword");var enchantedSword = new Sword(new SoulEatingEnchantment());enchantedSword.wield();enchantedSword.swing();enchantedSword.unwield();System.out.println("The valkyries receives an enchanted hammer");var enchantedHammer = new Hammer(new FlyingEnchantment());enchantedHammer.wield();enchantedHammer.swing();enchantedHammer.unwield();}
}