используя заводскую схему и плотное соединение

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

class CarFactory
{
public static function createCar($type)
{
if ($type == 'sport') {
return new SportCar();
} elseif ($type == 'LuxuryCar' {
return new LuxuryCar();
}
}
}

interface Vehicle
{
public function drive();
}

class SportCar implements Vehicle
{
$speed = 'very fast';
public function drive()
{
return ' is driving sport car';
}
}

class LuxuryCar implements Vehicle
{
$speed = 'normal';
public function drive()
{
return ' is driving luxury car';
}
}

class DrivingApplication
{
public function __constructor($driverName, $carType)
{
$car = CarFactory::createCar($carType); //<------ HERE//
echo $driverName . $car->drive();
}
}

$app = new DrivingApplication();

Итак, внутри класса DrivingApplication я создал автомобильный класс с помощью CarFactory. Мой вопрос:

  • это все еще предполагает тесную связь ??
  • Должен ли я создать автомобильный объект вне класса DrivingApplication и использовать внедрение зависимостей для решения проблемы тесной связи?
  • Что делать, если я могу только определить, какой тип автомобиля создать внутри класса DrivingApplication?

1

Решение

Что ж, new должен быть вызван где-то. Вы можете попробовать сделать его немного более динамичным, имея CarFactory::$classes массив, который отображает типы в классы:

class CarFactory {
public static $classes = [];
public static function create ( $type ) {
$class = static::$classes[$type];
return new $class();
}
}

Затем вы можете добавить типы автомобилей во время выполнения.

CarFactory::$classes['foo'] = 'FooClass';
$foo = CarFactory::create('foo');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]