デザインパターン Commandパターン
メモ。
package com.command1; // 実験セット public class Beaker { private double water = 0; // 水 private double salt = 0; // 食塩 private boolean melted = true; // 食塩が全て溶けた時true 溶け残った時false // コンストラクタ public Beaker(double water, double salt){ this.water = water; this.salt = salt; this.mix(); // かき混ぜる } // ビーカーに食塩を加えるメソッド public void addSalt(double salt){ this.salt += salt; } // ビーカーに水を加えるメソッド public void addWater(double water){ this.water += water; } // かき混ぜるメソッド public void mix(){ // 溶けたか、溶け残ったかをセットする 常温での飽和食塩水の濃度は26.4% if ((this.salt / (this.salt + this.water)) * 100 < 26.4 ) { melted = true; } else { melted = false; } } // 食塩の量を返すメソッド public double getSalt(){ return salt; } // 水の量を返すメソッド public double getWater(){ return water; } // 溶けたか、溶け残ったかを調べるメソッド public boolean isMelted(){ return melted; } // 実験結果をノートに記録する public void note(){ System.out.println("水:" + water + "g"); System.out.println("食塩:" + salt + "g"); System.out.println("濃度:" + (salt / (salt + water)) * 100 + "%"); } }
package com.command1; // 実験コマンドのスーパークラス public abstract class Command { // ビーカー protected Beaker beaker; // ビーカーをセットするメソッド public void setBeaker(Beaker beaker){ this.beaker = beaker; } // 要求内容を実行するメソッド public abstract void execute(); }
package com.command1; // 食塩を1gずつ加える実験のコマンドクラス public class AddSaltCommand extends Command { @Override public void execute() { // TODO 自動生成されたメソッド・スタブ // 食塩を1gずつ加えて飽和食塩水を作る実験をする場合 // 完全に溶けている間は食塩水を加える while (beaker.isMelted()) { beaker.addSalt(1); beaker.mix(); } // 実験結果をノートへ記述する System.out.println("食塩を1gずつ加える実験"); beaker.note(); } }
package com.command1; // 水を10gずつ加える実験のコマンドクラス public class AddWaterCommand extends Command { @Override public void execute() { // TODO 自動生成されたメソッド・スタブ // 水を10gずつ加えて飽和食塩水を作る実験をする場合 while (!beaker.isMelted()) { beaker.addWater(10); beaker.mix(); } // 実験結果をノートへ記述する System.out.println("水を10gずつ加える実験"); beaker.note(); } }
package com.command1; // 食塩水を作る実験のコマンドクラス public class MakeSaltWaterCommand extends Command { @Override public void execute() { // TODO 自動生成されたメソッド・スタブ // 食塩水を作る実験 beaker.mix(); // 濃度を量り、ノートへ記述する System.out.println("食塩水を作る実験"); beaker.note(); } }
package com.command1; public class Student { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 実験内容(コマンドオブジェクト)を用意します Command addSalt = new AddSaltCommand(); Command addWater = new AddWaterCommand(); Command makeSaltWater = new MakeSaltWaterCommand(); // 実験セットを実験内容にセットします addSalt.setBeaker(new Beaker(100, 0)); // 水100gの入ったビーカーをセットします addWater.setBeaker(new Beaker(0, 10)); // 食塩10gの入ったビーカーをセットします makeSaltWater.setBeaker(new Beaker(90, 10)); // 水90g、食塩10gの入ったビーカーをセットします // 実験を行う addSalt.execute(); addWater.execute(); makeSaltWater.execute(); } }
結果
食塩を1gずつ加える実験
水:100.0g
食塩:36.0g
濃度:26.47058823529412%
水を10gずつ加える実験
水:30.0g
食塩:10.0g
濃度:25.0%
食塩水を作る実験
水:90.0g
食塩:10.0g
濃度:10.0%