Middle+
126
questionbank
Каковы основные принципы и преимущества паттерна проектирования Bridge?
Ответ от нейросети
sobes.tech AI
Принципы:
- Разделяет抽象 и реализацию.
- Позволяет изменять абстракцию и реализацию независимо друг от друга.
- Использует композицию вместо наследования для связывания абстракции и реализации.
Преимущества:
- Уменьшает количество подклассов, когда абстракция и реализация имеют множество вариаций.
- Позволяет добавить новые реализации без изменения абстракции.
- Позволяет добавить новые абстракции без изменения существующих реализаций.
- Повышает гибкость системы.
Пример структуры:
<?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.