Head Firstデザインパターン
頭とからだで覚えるデザインパターンの基本
(オライリージャパン)
Eric Freeman (著), Elisabeth Freeman (著)
Kathy Sierra (著) Bert Bates (著)
佐藤 直生 (監訳), 木下 哲也 (翻訳)
有限会社 福龍興業 (翻訳)
開発環境
- OS X Yosemite - Apple (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Java (プログラミング言語)
- javac (コンパイラ)
- java (application launcher)
Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本 (Eric Freeman 著、Elisabeth Freeman 著、Kathy Sierra 著、Bert Bates 著、佐藤 直生 監訳、木下 哲也 翻訳、有限会社 福龍興業 翻訳、オライリージャパン)の1章(デザインパターン入門: デザインパターンへようこそ)、デザインパズル(p.25)を解いてみる。
その他参考書籍
デザインパズル(p.25)
コード(BBEdit, Emacs)
Character.java
public abstract class Character {
// Character has a WeaponBehavior.
WeaponBehavior weapon;
public Character() {}
public abstract void fight();
public void performWeapon() {
weapon.useWeapon();
}
public void setWeapon(WeaponBehavior wb) {
this.weapon = wb;
}
}
WeaponBehavior.java
public interface WeaponBehavior {
public void useWeapon();
}
KnifeBehavior.java
public class KnifeBehavior implements WeaponBehavior {
public void useWeapon() {
System.out.println("ナイフで切る。");
}
}
AxeBehavior.java
public class AxeBehavior implements WeaponBehavior {
public void useWeapon() {
System.out.println("斧で叩き切る。");
}
}
SwordBehavior.java
public class SwordBehavior implements WeaponBehavior {
public void useWeapon() {
System.out.println("剣を振り下ろす。");
}
}
BowAndArrowBehavior.java
public class BowAndArrowBehavior implements WeaponBehavior {
public void useWeapon() {
System.out.println("弓矢を引く。");
}
}
Queen.java
public class Queen extends Character {
public Queen() {
weapon = new BowAndArrowBehavior();
}
public void fight() {
System.out.println("Queenが戦う。");
}
}
King.java
public class King extends Character {
public King() {
weapon = new KnifeBehavior();
}
public void fight() {
System.out.println("Kingが戦う。");
}
}
Knight.java
public class Knight extends Character {
public Knight() {
weapon = new SwordBehavior();
}
public void fight() {
System.out.println("Knightが戦う。");
}
}
Troll.java
public class Troll extends Character {
public Troll() {
weapon = new AxeBehavior();
}
public void fight() {
System.out.println("Trollが戦う。");
}
}
入出力結果(Terminal)
$ javac *.java $ java CharacterSimulator Kingが戦う。 ナイフで切る。 Knightが戦う。 剣を振り下ろす。 setWeaponで振る舞いを動的に設定。 斧で叩き切る。 $
0 コメント:
コメントを投稿