Является ли это правильной моделью фабричного метода?

Я знаю, что есть много подобных вопросов, но я не понимаю большинство этих вопросов, потому что я не уверен, знаю ли я, что такое шаблон фабричного метода.

поэтому … после чтения многих примеров в Интернете я придумал следующие простые классы.

Правильно ли я делаю это?

abstract class Driveable { abstract public function start(); abstract public function stop(); } class CoupeDriveable extends Driveable { public function start() { } public function stop() { } } class MotorcycleDriveable extends Driveable { public function start() { } public function stop() { } } class SedanDriveable extends Driveable { public function start() { } public function stop() { } } class DriveableFactory { static public function create($numberOfPeople){ if( $numberOfPeople == 1 ) { return new MotorcycleDriveable; } elseif( $numberOfPeople == 2 ) { return new CoupleDriveable; } elseif( $numberOfPeople >= 3 && $numberOfPeople < 4) { return SedanDriveable; } } } class App { static public function getDriveableMachine($numberOfPeople) { return DriveableFactory::create($numberOfPeople); } } $DriveableMachine = App::getDriveableMachine(2); $DriveableMachine->start(); 

Solutions Collecting From Web of "Является ли это правильной моделью фабричного метода?"

Да. Это правильная реализация шаблона factory method .

Изменить +1 для комментария молчания. Должно быть, на ковеллере, не думал об этом.

Если быть точным: это шаблон Factory , а не шаблон Factory .

Разница в том, что в шаблоне Factory у вас есть отдельный заводский объект ( DriveableFactory ), тогда как в шаблоне метода Factory метод create() будет членом базового класса Driveable . Я не знаком с php, и шаблон все равно не применим к вашему конкретному сценарию, поэтому я не могу привести здесь пример кода.

Но в любом случае вы должны различать два шаблона. Я знаю, что вокруг них много путаницы, а запись в Википедии для шаблона Factory-метода просто неверна – среди множества других источников, которые можно найти в Интернете. Но лучше быть точным на этом, потому что для общения важно то же самое, когда вы используете одни и те же слова …

HTH – Томас