Рубрики
Uncategorized

Шаблоны проектирования PHP (8) Мост Для PHP

Автор оригинала: David Wong.

Шаблон соединения: Объедините два несвязанных класса, а затем используйте методы и атрибуты двух классов для вывода нового результата.

дело

Имитационная кисть

  • Требование: Теперь нам нужно подготовить три вида толщины (большую, среднюю и малую) и пять видов цветового соотношения.
  • Если мы используем цветные карандаши, нам нужно подготовить 3 * цветных карандаша, то есть мы должны подготовить 15 конкретных классов цветных карандашей. Если вы используете кисть, вам нужно всего три типа кистей, плюс пять цветовых полей, и вы можете использовать 3 + класса для достижения функции 15 цветных карандашей.
  • На самом деле, ключевое различие между карандашом и кистью заключается в том, можно ли разделить кисть и цвет. Абстракция и реализация отделены друг от друга, так что они могут изменяться независимо. Ключ – это развязка. Поскольку цветные карандаши не могут отделить перо от цвета, две степени свободы пера и цвет не могут быть изменены независимо, так что для выполнения задачи можно создать только 15 объектов. Кисть и краска могут быть хорошо разделены (соотношение и цвет разделены). Абстрактная концепция – “кисть рисует краской”. Каждый участник (кисть и краска) может свободно меняться в своей собственной степени свободы.
  • Мостовой режим преобразует наследование в композицию, что уменьшает связь между системами и уменьшает объем кодирования.

Имитация отправки корпоративных пакетов SMS

  • Спрос: компании теперь должны отправлять уведомления сотрудникам в различных формах (QQ, электронная почта и т.д.) В группах (временные работники, официальные работники, руководство и т.д.).

Применимость

  1. Абстракция класса и ее реализация должны быть расширены путем создания подклассов. Различные абстрактные интерфейсы и реализации объединяются и расширяются соответственно с помощью шаблона моста.
  2. Вам не нужна фиксированная связь между абстракцией и ее реализацией.
  3. Компонент имеет более одной абстрактной роли и роли реализации, и системе необходима динамическая связь между ними.

Эффект

  1. Шаблон моста отделяет внутреннюю связь привязки между абстракцией и реализацией, используя “комбинационную связь между объектами”, чтобы абстракция и реализация могли изменяться в соответствии с их соответствующими измерениями.
  2. Так называемые абстракция и реализация изменяются по их соответствующим измерениям, т. е. классифицируют их. После получения каждого подкласса они могут быть произвольными, что позволяет получать разные группы сотрудников и разные режимы передачи информации.
  3. Режим моста обычно применяется в “двух очень сильных измерениях изменения”. Иногда, даже если есть два измерения изменений, измерение изменений в одном направлении не является радикальным – другими словами, два изменения не приведут к сквозным результатам, и нет необходимости использовать мостовой режим.

Осуществление

Группировка сотрудников

abstract class Staff
{
    abstract public function staffData();
}

class CommonStaff extends Staff
{
    public function staffData()
    {
        Return "nickname, Xiaohong, Xiaohei";
    }
}

class VipStaff extends Staff
{
    public function staffData()
    {
        Return'Xiaoxing, Xiaolong';
    }
}

Форма отправки

// Abstract parent class
abstract class SendType
{
    abstract public function send($to, $content);
}

class QQSend extends SendType
{
    public function __construct()
    {
        // Connection mode with QQ interface
    }

    public function send($to, $content)
    {
        return $content. '(To '. $to . ' From QQ)
'; } }
class SendInfo
{
    protected $_level;
    protected $_method;

    public function __construct($level, $method)
    {
        // Here you can use singletons to control resource consumption
        $this->_level = $level;
        $this->_method = $method;
    }

    public function sending($content)
    {
        $staffArr = $this->_level->staffData();
        $result = $this->_method->send($staffArr, $content);
        echo $result;
    }
}

Звонок клиенту

$info = new SendInfo(new VipStaff(), new QQSend());
$info - > send ('go home for dinner');

$info = new SendInfo(new CommonStaff(), new QQSend());
$info - > send ('Continue to Work');

Выходной результат

To Xiaoxing and Xiaolong From QQ
Continue to Work (To nickname, Xiaohong, Xiaohei From QQ)

резюме

As can be seen from the above, if you add grouping or type of sending information, you can directly create a class to expand, very convenient.

But although Bridge is a very useful and complex model, it conforms well to the open-closed principle and the preferential use of objects, rather than inheriting the two object-oriented principles.