[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Какой паттерн тут применен?
Oggy
Какой паттерн тут применен?

class Cars
{
function createCar($brand)
{
$car_obj = 0;
switch ($brand) {
case 'toyota': $car_obj = new Toyota;
case 'bmw': $car_obj = new Bmw;
default: $car_obj = new Toyota;
}
return $car_obj;
}
}


abstract class Car
{
abstract function getMaxSpeed();
abstract function getWeight();
}

class Toyota extends Car
{
public function getMaxSpeed() {
}
}


linker
Очень похоже на фабрику.

_____________
Gear Framework
Gear Framework на Github
linker
Да, это абстрактная фабрика.

_____________
Gear Framework
Gear Framework на Github
Dezigo
Простая фабрика.

Цитата
Да, это абстрактная фабрика.

Вам двойка.
linker
Dezigo
Вам виднее.

Чтобы не ругались, это порождающий шаблон проектирования.

_____________
Gear Framework
Gear Framework на Github
Step
MiksIr
Это Фабричный метод (дочерние классы реализуют фабричный метод)

abstract class GoCar
{
public function rideInCar()
{
$car = $this->createCar();
$car->go();

return $car;
}

abstract public function createCar();
}

class GoToyota extends GoCar
{
public function createCar() {return new Toyota();}
}


class GoMitsubishi extends GoCar
{
public function createCar() {return new Mitsubishi();}
}


Это абстрактная фабрика (создание семейства продуктов)

abstract class ProductionCar
{
abstract public function createToyota(){}
abstract public function createMitsubishi(){}
}


class ProductionEurope extends ProductionCar
{
public function createToyota() {return new EuropeToyota();}
public function createMitsubishi(){return new EuropeMitsubishi();}
}


class ProductionChina extends ProductionCar
{
public function createToyota() {return new ChinaToyota();}
public function createMitsubishi(){return new ChinaMitsubishi();}
}



Топикстартер простая фабрика (SimpleFactory), но лучше разделять по конкретным API, так как если изменить ключевое слово в блоке swith изменения повлекут по всем "клиентам"

class CarSympleFactory
{
public function createToyota(){return new Toyota();}
public function createMitsubishi(){return new Mitsubishi();}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.