Разница между фасадом, Прокси, адаптером и дизайн-шаблонами декоратора? [закрытый]

в чем разница между фасадом, Прокси, адаптером и шаблонами дизайна декоратора?

Я никогда не читал четкого объяснения, что такое твое?

2 ответов


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

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

Прокси предоставляет тот же интерфейс, что и класс proxied-for, и обычно делает некоторые домашние дела самостоятельно. (Таким образом, вместо того, чтобы делать несколько копий тяжелого объекта X вы делаете копии легкая доверенности P, который в свою очередь управляет X и переводит ваши звонки по мере необходимости.) Вы решаете проблему клиента от необходимости управление тяжелым и / или сложным объект.

оформителя используется для добавления большего количества пороха к вашим объектам (обратите внимание на термин objects -- вы обычно динамически украшаете объекты во время выполнения). Вы не скрываете/ухудшаете существующие интерфейсы объекта, но просто продлить его во время выполнения.

Теперь, когда у вас есть декоратор, вы, вероятно, захотите узнать, почему акцент на объекте слова-некоторые языки (например, Java) просто не позволяют виртуальное наследование (т. е. множественное наследование, как это делает C++), чтобы вы могли выполнить это во время компиляции.

поскольку мы перетащили несколько наследств (и страшный алмаз), вы будете следить за mixins -- которые упорядоченная линейная цепочка интерфейсов чтобы обойти проблемы множественного наследования. Однако миксины не так хорошо смешиваются. И мы в конечном итоге черт -- да безгосударственные маленькие капли поведения что вы видите всплывающее все время в параметрах шаблона в C++. Черты пытаются решить проблемы композиции и декомпозиции поведения элегантным образом, не переходя ни к множественным наследствам, ни к упорядоченной цепочке.


фасад

вы можете использовать фасад, например, чтобы упростить вызовы API. Взгляните на этой пример удаленного фасада. Идея здесь заключается в том, что полное выполнение кода на сервере скрыта от клиента. Клиент вызывает 1 метод API, который, в свою очередь, может сделать 1 или более вызовов API на сервере.

адаптер

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

введите объект адаптера.

Он может принять вызов от Source объект и, за кулисами, вызовите Target метод, который следует использовать.

Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)

Что касается прокси, у меня нет никакого опыта в этом шаблоне дизайна.