Warcraft3でデザインパターン: Template Method
[ Java ]
デザインパターンの勉強を兼ねて、Warcraft III の世界を使ってデザインパターンを実装してみようのコーナー。第一回目は簡単なところからということで、Template Method。言語は Java を選択。
まず、AbstractClass として AbstractHero.java。ヒーローをあらわす抽象クラス。showStatus()メソッドがTemplate Method になっている。
package template_method;
public abstract class AbstractHero {
public abstract String getName();
public abstract String[] getAbilities();
public abstract void doUltimateAbilitiy();
public final void showStatus() {
System.out.println("名前: " + this.getName());
String[] abi = getAbilities();
for (int i = 0; i < abi.length; i++){
System.out.println("アビリティ" + i + ": " + abi[i]);
}
this.doUltimateAbilitiy();
}
}
次に、ConcreteClass として、二つのヒーローを実装してみた。一つ目は MountainKing.java。
package template_method;
public class MountainKing extends AbstractHero {
private String name;
private String[] abilities;
public MountainKing() {
this.name = "Mountain King";
this.abilities = new String[3];
abilities[0] = "Bash";
abilities[1] = "Storm Bolt";
abilities[2] = "Thunder Clap";
}
public String getName() {
return name;
}
public String[] getAbilities() {
return abilities;
}
public void doUltimateAbilitiy() {
System.out.println("Avatarに変身するよ");
}
}
もう一つのヒーローは、BladeMaster.java。
package template_method;
public class BladeMaster extends AbstractHero {
private String name;
private String[] abilities = new String[3];
public BladeMaster() {
name = "Blade Master";
abilities[0] = "Wind Walk";
abilities[1] = "Mirror Image";
abilities[2] = "Critical Strike";
}
public String getName() {
return name;
}
public String[] getAbilities() {
return abilities;
}
public void doUltimateAbilitiy() {
System.out.println("Bladestormで雑魚は一毛打尽だ。");
}
}
これらを利用するClientとしてMain.java
package template_method;
public class Main {
public static void main (String[] args) {
AbstractHero h1 = new MountainKing();
AbstractHero h2 = new BladeMaster();
h1.showStatus();
h2.showStatus();
}
}
実行結果は以下。
名前: Mountain King
アビリティ0: Bash
アビリティ1: Storm Bolt
アビリティ2: Thunder Clap
Avatarに変身するよ
名前: Blade Master
アビリティ0: Wind Walk
アビリティ1: Mirror Image
アビリティ2: Critical Strike
Bladestormで雑魚は一毛打尽だ。
スーパークラスがコントロールする多様性が実現できました
Posted by naoya at May 5, 2003 02:08 AM
| トラックバック (0)