Из того, что я понял от быстрого чтения результатов Google, сменный адаптер является адаптером, который не трудно кодируется против определенного adaptee. На поверхности (собственный интерфейс адаптера), это все одинаково, но это может адаптироваться к другому adaptees с различными интерфейсами. Я нашел этот поток довольно объяснительным:
В основном это позволяет Вам вставлять адаптер, когда adaptee (получатель) протокол не известен во время компиляции при помощи отражения. При создании экземпляра адаптера Вы передаете его название метода adaptee для вызова, и также любые метаданные, это необходимо перевести входные типы. Когда адаптер получает вызов метода целевого интерфейса, он использует отражение для вызова соответствующего метода указанным на adaptee.
И это:
Основная ответственность Средства просмотра состоит в том, чтобы заполнить виджет от модели предметной области, не делая предположений о самом домене. Средство просмотра JFace использует механизм Объектов Делегирования в Сменном Шаблоне "адаптер" для реализации указанного выше требования.
Думайте о нем как о facehugger от Постороннего объекта; то, когда это обнимает поверхность, все, что Вы видите, является слизистой задней частью facehugger. Можно ввести его по абсолютному адресу с палкой и попытаться любопытствовать от ее рук (интерфейс адаптера). Но это в основном может обнять поверхность любого человека (adaptee), независимо от функций поверхности. Возможно, я продвигаю его немного, но, эй, я люблю Посторонний объект.
Можно прочитать эту статью о шаблоне адаптера / сменном шаблоне:
Оглавление в этой статье:
* 1 Design Patterns
* 2 Intent of Adapter
* 3 Motivation
* 4 Structure
* 5 Applicability
* 6 Consequences
* 7 Implementation
o 7.1 Known Uses and Sample Code
o 7.2 Related Patterns
* 8 Conclusions
* 9 Appendix
o 9.1 References
o 9.2 Glossary
Кавычка:
Smalltalk представил понятие "сменного адаптера" для описания классов со встроенной интерфейсной адаптацией. Это интересное понятие позволяет, чтобы классы были введены в существующие системы, которые могли бы ожидать различные интерфейсы к классу. Эта техника может помочь способствовать повторному использованию класса через модули и даже проекты.
Вот небольшой пример:
У нас есть два класса - Нечто и Шиканье что выводы некоторая строка к консоли. Класс адаптера может адаптировать методы от обоих классов для обеспечения интерфейса (SaySomething), требуемый клиентом. Обратите внимание, что нет никакой зависимости от имени интерфейса - мы можем легко адаптировать и методы SayHey и Лая.
class Foo
{
public static void SayHey() { Console.WriteLine("Hey!"); }
}
class Boo
{
public static void Bark() { Console.WriteLine("Woof!"); }
}
class Adapter
{
public Action SaySomething { get; private set;} // "pluggable" adapter
public Adapter(Action saySomethingAction)
{
SaySomething = saySomethingAction;
}
}
class Program
{
static void Main(string[] args)
{
(new Adapter(Foo.SayHey)).SaySomething();
(new Adapter(Boo.Bark)).SaySomething();
}
}