前回振り返り
Facadeパターン
Facadeパターンは、サブシステム(下位機能)を統合して、より使いやすい高水準インタフェースを提供する。
このパターンでは、Facadeクラスが窓口となり、サブシステム内部に仕事を投げるだけで複雑な実装は持たない。とはいえ、Facadeクラスの利用は強制ではなく、必要であればサブシステムの機能を直接利用できる。言語によっては無名名前空間やPackageスコープによりサブシステムを利用者から隔離できるが、Facadeパターンはそのような制限はしない。
前回演習問題の解答 例
問題1
問題文
Facadeパターン を作成してみましょう。
wikipedia のJava実装例を記述してみましょう。
解答例
public class FacadeTest{
public static void main(String[] argv){
new DrivingSimulator().simulate();
}
}
class Car{
private int speed;
private int distance;
Car(){
this.speed = 0;
this.distance = 0;
}
void setSpeed(int speed){
this.speed = speed;
}
void run(int minutes){
this.distance += minutes * this.speed;
}
int getDistance(){
return this.distance;
}
}
class Driver{
private Car car;
Driver(Car car){
this.car = car;
}
void pushPedal(int speed){
this.car.setSpeed(speed);
}
void drive(int minutes){
this.car.run(minutes);
}
}
class DrivingSimulator{
public void simulate(){
Car c = new Car();
Driver d = new Driver(c);
d.pushPedal(700);
d.drive(30);
d.pushPedal(750);
d.drive(20);
System.out.println("The travel distance is " + c.getDistance() + " m.");
}
}
問題2
問題文
問1のDrivingSimulator#simulateでは、pushPedalメソッドの引数に分速を渡しているが、時速に変更するとどうなるでしょうか。
解答例
public class FacadeTest{
public static void main(String[] argv){
new DrivingSimulator().simulate();
}
}
class Car{
private int speed;
private int distance;
Car(){
this.speed = 0;
this.distance = 0;
}
void setSpeed(int jisoku){
this.speed = jisoku * 1000 / 60;
}
void run(int minutes){
this.distance += minutes * this.speed;
}
int getDistance(){
return this.distance;
}
}
class Driver{
private Car car;
Driver(Car car){
this.car = car;
}
void pushPedal(int jisoku){
this.car.setSpeed(jisoku);
}
void drive(int minutes){
this.car.run(minutes);
}
}
class DrivingSimulator{
public void simulate(){
Car c = new Car();
Driver d = new Driver(c);
d.pushPedal(42);
d.drive(30);
d.pushPedal(45);
d.drive(20);
System.out.println("The travel distance is " + c.getDistance() + " m.");
}
}
今回の演習問題
問題1
問題文
State パターン を作成してみましょう。
wikipedia のJava実装例を記述してみましょう。
問題2
問題文
問1のクラスを身近なものにアレンジしてみましょう。
コメント