Это правильный шаблон фабричного метода? - PullRequest
0 голосов
/ 02 ноября 2011

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

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

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

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();

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

Если быть точным: это Фабричный шаблон , а не Фабричный метод .

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

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

HTH - Томас

2 голосов
/ 02 ноября 2011

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

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

...