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 著、佐藤 直生 監訳、木下 哲也 翻訳、有限会社 福龍興業 翻訳、オライリージャパン)の3章(Decoratorパターン: オブジェクトの装飾)、自分で考えてみよう(p.99)を解いてみる。
その他参考書籍
自分で考えてみよう(p.99)
コード(BBEdit, Emacs)
Size.java
public enum Size {TALL, GRANDE, VENTI};
Beverage.java
public abstract class Beverage { String description = "不明な飲み物"; Size size = Size.GRANDE; public String getDescription() { return description; } public void setSize(Size size) { this.size = size; } public Size getSize() { return this.size; } public abstract double cost(); }
Espresso.java
public class Espresso extends Beverage { public Espresso() { description = "エスプレッソ"; } public double cost() { return 1.99; } }
CondimentDecorator.java
public abstract class CondimentDecorator extends Beverage { public abstract String getDescription(); }
Soy.java
public class Soy extends CondimentDecorator { Beverage beverage; public Soy(Beverage beverage) { this.beverage = beverage; } public String getDescription() { return beverage.getDescription() + "、豆乳"; } public void setSize(Size size) { beverage.setSize(size); } public double cost() { double cost = beverage.cost(); switch (beverage.getSize()) { case TALL: cost += .10; break; case GRANDE: cost += .15; break; case VENTI: cost += .20; break; } return cost; } }
StarbuzzCoffee.java
public class StarbuzzCoffee { public static void main(String[] args) { Beverage beverage = new Espresso(); System.out.println(beverage.getDescription() + " $" + beverage.cost()); Beverage beverage1 = new Espresso(); beverage1 = new Soy(beverage1); System.out.println(beverage1.getDescription() + " $" + beverage1.cost()); Beverage beverage2 = new Espresso(); beverage2 = new Soy(beverage2); beverage2.setSize(Size.TALL); System.out.println(beverage2.getDescription() + " $" + beverage2.cost()); Beverage beverage3 = new Espresso(); beverage3 = new Soy(beverage3); beverage3.setSize(Size.GRANDE); System.out.println(beverage3.getDescription() + " $" + beverage3.cost()); Beverage beverage4 = new Espresso(); beverage4 = new Soy(beverage4); beverage4.setSize(Size.VENTI); System.out.println(beverage4.getDescription() + " $" + beverage4.cost()); } }
入出力結果(Terminal)
$ javac Size.java Beverage.java CondimentDecorator.java Espresso.java Soy.java $ java StarbuzzCoffee エスプレッソ $1.99 エスプレッソ、豆乳 $2.14 エスプレッソ、豆乳 $2.09 エスプレッソ、豆乳 $2.14 エスプレッソ、豆乳 $2.19 $
0 コメント:
コメントを投稿