Я знаю, что есть много подобных вопросов, но я не понимаю большинство этих вопросов, потому что я не уверен, знаю ли я, что такое шаблон фабричного метода.
поэтому … после чтения многих примеров в Интернете я придумал следующие простые классы.
Правильно ли я делаю это?
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();
Да. Это правильная реализация шаблона factory method
.
Изменить +1 для комментария молчания. Должно быть, на ковеллере, не думал об этом.
Если быть точным: это шаблон Factory , а не шаблон Factory .
Разница в том, что в шаблоне Factory у вас есть отдельный заводский объект ( DriveableFactory
), тогда как в шаблоне метода Factory метод create()
будет членом базового класса Driveable
. Я не знаком с php, и шаблон все равно не применим к вашему конкретному сценарию, поэтому я не могу привести здесь пример кода.
Но в любом случае вы должны различать два шаблона. Я знаю, что вокруг них много путаницы, а запись в Википедии для шаблона Factory-метода просто неверна – среди множества других источников, которые можно найти в Интернете. Но лучше быть точным на этом, потому что для общения важно то же самое, когда вы используете одни и те же слова …
HTH – Томас