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