Абстрактный класс против простого класса в Design Pattern — Стратегия

Есть ли разница между этими двумя методами? Если это так, какой метод лучше?

Первый способ
Используя абстрактный класс:

//Client class:
class Client extends Context
{
public function insertData()
{
$this->chooseStrategy(new DataEntry());
$this->algorithm();
}
public function findData()
{
$this->chooseStrategy(new SearchData());
$this->algorithm();
}
public function showAll()
{
$this->chooseStrategy(new DisplayData());
$this->algorithm();
}
}
//Context class:
abstract class Context
{
private $strategy;
public function chooseStrategy(IStrategy $strategy)
{
$this->strategy = $strategy;
}
public function algorithm()
{
$this->strategy->algorithm();
}
}

Второй способ
Используйте простой класс

//Client class:
class Client
{
public function insertData()
{
$context = new Context(new DataEntry());
$context->algorithm();
}
public function findData()
{
$context = new Context(new SearchData());
$context->algorithm();
}
public function showAll()
{
$context = new Context(new DisplayData());
$context->algorithm();
}
}
//Context class:
class Context
{
private $strategy;
public function __construct(IStrategy $strategy)
{
$this->strategy = $strategy;
}
public function algorithm()
{
$this->strategy->algorithm();
}
}

Оба метода используют один и тот же интерфейс IStrategy и один и тот же класс Strategy.

0

Решение

Задача ещё не решена.

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

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

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