このチュートリアルが PHP でファクトリ デザイン パターンを正しく実装しているかどうかを知りたいです。以下が実際のソースコードです。
<?php
class Automobile
{
private $vehicle_make;
private $vehicle_model;
public function __construct($make, $model)
{
$this->vehicle_make = $make;
$this->vehicle_model = $model;
}
public function get_make_and_model()
{
return $this->vehicle_make . ' ' . $this->vehicle_model;
}
}
class AutomobileFactory
{
public static function create($make, $model)
{
return new Automobile($make, $model);
}
}
// have the factory create the Automobile object
$veyron = AutomobileFactory::create('Bugatti', 'Veyron');
print_r($veyron->get_make_and_model()); // outputs "Bugatti Veyron"
Gang of Fourの本「Design Patterns」によると、factory パターンの適用可能性は
- クラスは、作成しなければならないオブジェクトのクラスを予測できません
- クラスは、そのサブクラスが作成するオブジェクトを指定することを望んでいます
- クラスがいくつかのヘルパー サブクラスの 1 つに責任を委任し、どのヘルパー サブクラスが委任されているかの知識をローカライズしたい
最初のポイントは、この例は、作成するオブジェクトのクラスを実際に知っているというAutomobile
ことです。
2 番目のポイントは、サブクラスがありません。Automobile
クラスは から継承しませんAutomobileFactory
。AutomobileFactory には、オブジェクトの作成を処理する Automobile によって実装される関数が少なくとも 1 つ必要であると考えました。
誰かがこれを明確にできますか?デザインパターンの学習を始めたばかりで、他のチュートリアルとは異なるチュートリアルに遭遇するたびに、とても混乱します。