шаблон "мост" по сравнению с шаблоном "декоратор"

Может кто-либо разрабатывать шаблон разработки Моста и Шаблон "декоратор" для меня. Я нашел это подобным в некотором роде. Я не знаю, как отличить его?

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

Например,

Шаблон "мост"

class Cellphone {
private:
Impl* m_OS;         // a cellphone can have different OS

}

Шаблон "декоратор"

class Shirt {
private:
Person * m_p;           //put a shirt on the person;

}
9
задан Ravindra babu 30 May 2016 в 15:50
поделиться

3 ответа

Декоратор должен соответствовать интерфейсу объекта, который вы украшаете. то есть он имеет те же методы и позволяет перехватывать аргументы на входе и результат на выходе. Вы можете использовать это, чтобы обеспечить дополнительное поведение декорированному объекту при сохранении того же интерфейса / контракта. Обратите внимание, что интерфейс декоратора может предоставлять дополнительные функциональные возможности для создания более полезного объекта.

У Моста такого ограничения нет. Клиентский интерфейс может отличаться от базового компонента, обеспечивающего реализацию, и, таким образом, он соединяет мост между клиентским интерфейсом и фактической реализацией (которая может быть неудобной для клиента, может быть изменена и т. Д.)

17
ответ дан 4 December 2019 в 08:33
поделиться

Ваша реализация шаблона декоратора не совсем верна. Было бы лучше, если бы вы это сделали:

class PersonWearingShirt : IPerson
{
private:
    IPerson * m_p;           //put a shirt on the person;

}

Идея в том, что когда вы украшаете класс , вы открываете точно такой же интерфейс. Это заставит ваш "украшенный" экземпляр выглядеть и действовать как оригинал. Это позволяет вам обернуть экземпляр несколько раз несколькими декораторами, но обращаться с ним точно так же, как с исходным экземпляром.

6
ответ дан 4 December 2019 в 08:33
поделиться

Брайан прав. Я добавлю, что концептуально клиент будет «знать», что он использует мост к базовому объекту, но с декоратором клиент не сможет знать, что между ним и целевым объектом есть слой декоратора.

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

1
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

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