Разница между фасадом, Прокси, адаптером и дизайн-шаблонами декоратора? [закрытый]
в чем разница между фасадом, Прокси, адаптером и шаблонами дизайна декоратора?
Я никогда не читал четкого объяснения, что такое твое?
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)
Что касается прокси, у меня нет никакого опыта в этом шаблоне дизайна.