Facade パターン

Facade パターン - Wikipedia

ごちゃごちゃなクラス群を使用するための処理を、Facade(建物の正面の意味らしい)という窓口作ってそこに集約することで見やすくする感じ。あんまりおもしろくない。以下のコードはWikipediaJAVA版をC++に直したもの。

#include<iostream>
using namespace std;
//some classes
class Car
{
public :
	Car() : speed_(0),distance_(0){}
	void SetSpeed(int speed){
		this->speed_ = speed;
	}
	void Run(int minutes){
		this->distance_ += minutes * this->speed_;
	}
	int GetDistance(){
		return this->distance_;
	}
private :
	int speed_;
	int distance_;
};
class Driver
{
public :
	Driver(Car *car) : car_(car){}
	~Driver(){delete car_;}
	void PushPedal(int speed){
		car_->SetSpeed(speed);
	}
	void Drive(int minutes){
		car_->Run(minutes);
	}
private :
	Car *car_;
};
//Facade
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);
		cout << "The travel distance is " << c->GetDistance() << " m." << endl;
		delete d;
	}
};
//main
int main()
{
	DrivingSimulator d;
	d.Simulate();
	return 0;
}