Sobes.tech
Middle

Чӣ гуна моделрои тарҳрезии 'Стратегия' дар PHP иҷро мекунед?

sobes.tech AI

Ҷавоб аз AI

Шаблони Стратегия имкон медиҳад, ки алгоритмҳои гуногунро дар класиҳои алоҳида инкапсулат кунед ва онҳоро дар вақти иҷрои барнома иваз кунед. Кодекси муштарӣ бо интерфейси умумии стратегиҳо кор мекунад, бидуни донистани татбиқи мушаххас.

Иҷро дар PHP дар бар мегирад:

  1. Интерфейси Стратегия: Муайян мекунад усули умумӣ, ки ҳама стратегиҳои мушаххас онро иҷро мекунанд.
  2. Стратегиҳои мушаххас: Классҳо, ки интерфейсро иҷро мекунанд ва логикаи махсуси алгоритмро доранд.
  3. Мавқеъ: Класс, ки истинод ба объекти стратегия дорад ва иҷрои усулро ба онҳо месупорад.

Масалан:

<?php
// 1. Интерфейси Стратегия
interface SortStrategy
{
    public function sort(array $data): array;
}

// 2. Стратегияи мушаххас (сортгирии буғумӣ)
class BubbleSortStrategy implements SortStrategy
{
    public function sort(array $data): array
    {
        $n = count($data);
        for ($i = 0; $i < $n; $i++) {
            for ($j = 0; $j < $n - 1 - $i; $j++) {
                if ($data[$j] > $data[$j + 1]) {
                    $temp = $data[$j];
                    $data[$j] = $data[$j + 1];
                    $data[$j + 1] = $temp;
                }
            }
        }
        return $data;
    }
}

// 2. Стратегияи мушаххас (сортгирии зуд)
class QuickSortStrategy implements SortStrategy
{
    public function sort(array $data): array
    {
        // Иҷрои содда барои мисол, дар коди воқеӣ рекурсия
        sort($data); // Встроен функсияро барои нишон додан истифода мебарем
        return $data;
    }
}

// 3. Мавқеъ
class SortedList
{
    private SortStrategy $strategy;
    private array $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function setSortStrategy(SortStrategy $strategy): void
    {
        $this->strategy = $strategy;
    }

    public function sort(): array
    {
        if (!isset($this->strategy)) {
            throw new \RuntimeException("Стратегияи сортгирӣ насб нашудааст.");
        }
        return $this->strategy->sort($this->data);
    }
}

// Истифода
$data = [5, 2, 8, 1, 9, 4];
$sortedList = new SortedList($data);

// Бо истифода аз сортгирии буғумӣ
$sortedList->setSortStrategy(new BubbleSortStrategy());
$sortedDataBubble = $sortedList->sort();
print_r($sortedDataBubble);

// Бо истифода аз сортгирии зуд
$sortedList->setSortStrategy(new QuickSortStrategy());
$sortedDataQuick = $sortedList->sort();
print_r($sortedDataQuick);

Фоидаҳо:

  • Флексибилӣ: Илова кардани алгоритмҳои нав ба осонӣ бе тағир додани контекст.
  • Пайдоиш: Стратегияҳои нав метавонанд мустақилона татбиқ шаванд.
  • Тозаии код: Мавқеъ аз логикаи алгоритмҳои мушаххас ҷудо аст.
  • Санҷишпазирӣ: Ҳар стратегияи мустақилона санҷида мешавад.