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 コメント:
コメントを投稿