GoFのデザインパターンのFactoryMethodパターンを勉強してみます。
FactoryMethodパターン
インスタンスの作り方をスーパークラスで定め、具体的な処理をサブクラスで行うパターンです。
より柔軟な処理をするための工夫になります。
使い方
interface Position {
public function horizontal();
public function vertical();
}
class LeftPosition implements Position {
public function horizontal(){
return 10;
}
public function vertical(){
return 10;
}
}
class RightPosition implements Position {
public function horizontal(){
return 100;
}
public function vertical(){
return 10;
}
}
class Report {
public abstract function header($position);
protected Position createPosition(){
return new LeftPosition();
}
public function output(){
$app = this.createPosition();
this.header($app);
}
}
class Attendance extends Report {
public function header($position);
echo "ヘッダー";
}
}
class Statistic extends Report {
protected Position createPosition(){
return new RightPosition();
}
public function header($position){
echo "統計";
}
}
位置情報を追加してみました。
雑記
factoryと名前のつくパターンがいくつかあり、パターンの違いを理解していないためどのパターンを利用すればいいのか考えることが多いので再学習が必要と思ったパターンです。
TemplateMethodパターンをさらに柔軟にする使い方ができるパターンだと思いました。
デザインパターンの際にクラス図を載せないとわかりづらいですね。探しておきます。