Sobes.tech
Middle+
126
questionbank

Каковы основные принципы и преимущества паттерна проектирования Bridge?

Ответ от нейросети

sobes.tech AI

Принципы:

  1. Разделяет抽象 и реализацию.
  2. Позволяет изменять абстракцию и реализацию независимо друг от друга.
  3. Использует композицию вместо наследования для связывания абстракции и реализации.

Преимущества:

  1. Уменьшает количество подклассов, когда абстракция и реализация имеют множество вариаций.
  2. Позволяет добавить новые реализации без изменения абстракции.
  3. Позволяет добавить новые абстракции без изменения существующих реализаций.
  4. Повышает гибкость системы.

Пример структуры:

<?php
// Абстракция
abstract class Abstraction
{
    protected Implementor $implementor;

    public function __construct(Implementor $implementor)
    {
        $this->implementor = $implementor;
    }

    abstract public function operation(): string;
}

// Уточненная абстракция
class RefinedAbstraction extends Abstraction
{
    public function operation(): string
    {
        return "RefinedAbstraction: " . $this->implementor->operationImplementor();
    }
}

// Интерфейс реализации
interface Implementor
{
    public function operationImplementor(): string;
}

// Конкретные реализации
class ConcreteImplementorA implements Implementor
{
    public function operationImplementor(): string
    {
        return "ConcreteImplementorA operation.";
    }
}

class ConcreteImplementorB implements Implementor
{
    public function operationImplementor(): string
    {
        return "ConcreteImplementorB operation.";
    }
}

// Пример использования
$implementorA = new ConcreteImplementorA();
$abstractionA = new RefinedAbstraction($implementorA);
echo $abstractionA->operation(); // Вывод: RefinedAbstraction: ConcreteImplementorA operation.

$implementorB = new ConcreteImplementorB();
$abstractionB = new RefinedAbstraction($implementorB);
echo $abstractionB->operation(); // Вывод: RefinedAbstraction: ConcreteImplementorB operation.