Когда вы используете шаблон моста? Чем он отличается от шаблона адаптера?

Вы можете легко использовать следующий способ:

INSERT INTO ... ON DUPLICATE KEY UPDATE ...

Таким образом, вы можете вставить любое новое необработанное и если у вас есть повторяющиеся данные, замените определенный столбец (лучшие столбцы - это отметки времени). Например:

CREATE TABLE IF NOT EXISTS Devices (
  id         INT(6)       NOT NULL AUTO_INCREMENT,
  unique_id  VARCHAR(100) NOT NULL PRIMARY KEY,
  created_at VARCHAR(100) NOT NULL,
  UNIQUE KEY unique_id (unique_id),
  UNIQUE KEY id (id)
)
  CHARACTER SET utf8
  COLLATE utf8_unicode_ci;

INSERT INTO Devices(unique_id, time) 
VALUES('$device_id', '$current_time') 
ON DUPLICATE KEY UPDATE time = '$current_time';
143
задан lmichelbacher 18 June 2018 в 20:21
поделиться

5 ответов

Классический пример Шаблона "мост" используется в определении форм в среде UI (см. статья в Википедии Шаблона "мост" ). Шаблон "мост" составной объект из Шаблон и шаблоны Стратегии .

Это - общее представление некоторые аспекты Шаблона "адаптер" в Шаблоне "мост". Однако заключить в кавычки от эта статья :

На первый взгляд, Шаблон "мост" много походит на Шаблон "адаптер", в котором класс используется для преобразования одного вида интерфейса другому. Однако намерение Шаблона "адаптер" состоит в том, чтобы заставить интерфейсы одного или нескольких классов выглядеть одинаково как тот из конкретного класса. Шаблон "мост" разработан для разделения интерфейса класса от его реализации, таким образом, можно варьироваться или заменить реализацию, не изменяя клиентский код.

76
ответ дан shek 18 June 2018 в 20:21
поделиться

Шаблон "мост" является приложением старого совета, "предпочтите состав по наследованию". Становится удобно, когда необходимо разделить различные времена на подклассы способами, которые являются ортогональными друг с другом. Скажите, что необходимо реализовать иерархию цветных фигур. Вы не разделили бы Форму на подклассы с Прямоугольником и Кругом и затем разделили бы Прямоугольник на подклассы с RedRectangle, BlueRectangle и GreenRectangle и тем же для Круга, не так ли? Вы предпочли бы говорить, что каждая Форма имеет Цвет и реализовать иерархию цветов, и это - Шаблон "мост". Ну, я не реализовал бы "иерархию цветов", но Вы получаете идею...

223
ответ дан Federico A. Ramponi 18 June 2018 в 20:21
поделиться

Я использовал шаблон "мост" на работе. Я программирую в C++, где это часто называют идиомой PIMPL (указатель на реализацию). Это похоже на это:

class A
{
public: 
  void foo()
  {
    pImpl->foo();
  }
private:
  Aimpl *pImpl;
};

class Aimpl
{
public:
  void foo();
  void bar();
};  

В этом примере class A содержит интерфейс, и class Aimpl содержит реализацию.

Одно использование для этого шаблона должно представить только некоторых общедоступных членов класса реализации, но не других. В примере [только 113] можно назвать через открытый интерфейс A, но не Aimpl::bar()

, Другое преимущество состоит в том, что можно определить Aimpl в отдельном заголовочном файле, который не должен быть включен пользователями A лет. Все, что необходимо сделать, использовать предописание Aimpl, прежде чем A будет определен, и переместите определения всех функций членства, ссылающихся pImpl в .cpp файл. Это дает Вам способность сохранить Aimpl заголовок частным, и уменьшить время компиляции.

9
ответ дан Dave M 18 June 2018 в 20:21
поделиться

Адаптер и Мост, конечно, связаны, и различие является тонким. Вероятно, что некоторые люди, которые думают, что используют один из этих шаблонов, на самом деле используют другой шаблон.

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

принимая во внимание, что Шаблон "мост" используется для кода, который, более вероятно, будет greenfield. Вы разрабатываете Мост для обеспечения абстрактного интерфейса для реализации, которая должна варьироваться, но Вы также определяете интерфейс тех классов реализации.

Драйверы устройств являются часто процитированным примером Моста, но я сказал бы, что это - Мост, если Вы определяете интерфейсную спецификацию для поставщиков устройства, но это - Адаптер, если Вы берете существующие драйверы устройств и делаете класс обертки для обеспечения объединенного интерфейса.

Настолько мудрый кодом, эти два шаблона очень похожи. Бизнес-мудрый, они отличаются.

См. также http://c2.com/cgi/wiki?BridgePattern

29
ответ дан Bill Karwin 18 June 2018 в 20:21
поделиться

По моему опыту, мост - довольно часто повторяющийся шаблон, потому что это решение, когда существует два ортогональных измерения в области . Например. формы и методы рисования, поведения и платформы, форматы файлов и сериализаторы и так далее.

И совет: всегда думайте о шаблонах проектирования с концептуальной точки зрения , а не с точки зрения реализации. С правильной точки зрения, Bridge нельзя путать с адаптером, потому что они решают другую проблему, а композиция превосходит наследование не ради себя, а потому, что позволяет обрабатывать ортогональные проблемы по отдельности.

26
ответ дан 23 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: