Вы на самом деле используете простую фабрику в своем примере, и она выглядит хорошо для меня.С этими требованиями нет необходимости использовать шаблон фабричного метода.
Однако я попытаюсь объяснить фабричный метод в этом контексте.По определению:
Шаблон метода фабрики определяет интерфейс для создания объекта, но пусть подклассы решают, какой класс создать.Фабричный метод позволяет классу откладывать создание экземпляров для подклассов.
Таким образом, в основном у вас будет абстрактный фабричный класс, который определяет, какие творческие методы будут доступны на конкретных фабриках, и последний будет решать, какие конкретные объекты создавать.
Есть один пример, который я могу вспомнить в вашем сценарии.Допустим, у вас есть Drivables разных марок (скажем, BMW и Honda).Таким образом, у вас будут классы типа BMWCoupeDrivable,
BMWMotorcycleDrivable, BMWSedanDrivable, HondaCoupeDrivable, HondaMotorcycleDrivable, HondaSedanDrivable
.Вы также можете добавить больше марок в будущем.В этом случае вам, вероятно, лучше использовать фабричный метод.
abstract class DriveableFactory
{
abstract public function create($numberOfPeople);
//-- Other methods here which manipulate the drivable
//-- e.g. testDrive()
}
class BMWDriveableFactory extends DriveableFactory
{
public function create($numberOfPeople){
if( $numberOfPeople == 1 )
{
return new BMWMotorcycleDriveable;
}
elseif( $numberOfPeople == 2 )
{
return new BMWCoupleDriveable;
}
elseif( $numberOfPeople >= 3 && $numberOfPeople < 4)
{
return BMWSedanDriveable;
}
}
}
class HondaDriveableFactory extends DriveableFactory
{
public function create($numberOfPeople){
if( $numberOfPeople == 1 )
{
return new HondaMotorcycleDriveable;
}
elseif( $numberOfPeople == 2 )
{
return new HondaCoupleDriveable;
}
elseif( $numberOfPeople >= 3 && $numberOfPeople < 4)
{
return HondaSedanDriveable;
}
}
}
Для лучшего объяснения я бы предложил прочитать Head First Design Pattern.