Кто-нибудь может мне объяснить концепцию сменного адаптера на хорошем примере? - PullRequest
6 голосов
/ 16 января 2009

Кто-нибудь может мне объяснить концепцию сменного адаптера на хорошем примере?

Ответы [ 3 ]

13 голосов
/ 16 января 2009

Из того, что я понял из быстрого прочтения результатов Google, сменный адаптер - это адаптер, который не жестко запрограммирован для конкретного адаптера. На первый взгляд (собственный интерфейс адаптера) все одинаково, но он может адаптироваться к различным адаптерам с разными интерфейсами. Я нашел эту тему довольно объяснительно:

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

И это :

Основная ответственность зрителя это заполнить виджет из домена модель без каких-либо предположений о самом домене. JFace Viewer использует механизм делегирования объектов в Шаблон сменного адаптера для реализации вышеуказанное требование.

Facehugger in action

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

3 голосов
/ 16 января 2009

Вы можете прочитать эту статью об адаптере / подключаемом шаблоне:

Содержание этой статьи:

* 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 представил концепцию «подключаемый адаптер» для описания классы со встроенным интерфейсом приспособление. Это интересная концепция позволяет вводить классы в существующие системы, которые могут ожидать разные интерфейсы к учебный класс. Эта техника может помочь продвинуть повторное использование класса через модули и даже проекты.

Вот небольшой пример:

У нас есть два класса - Foo & Boo, которые выводят некоторую строку в консоль. Класс адаптера может адаптировать методы из обоих классов для предоставления интерфейса (SaySomething), требуемого клиентом. Обратите внимание, что нет никакой зависимости от имени интерфейса - мы можем легко адаптировать методы как SayHey, так и Bark.

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();
    }
}
0 голосов
/ 19 ноября 2016

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

 interface Ilegacy
    {
        float calculate(int a, int b);
    }
    class Legacy : Ilegacy
    {
        public float calculate(int a, int b)
        {
            return a * b;
        }
    }
    class Adapter
    {
        public Func<int, int, float> legacyCalculator;
        public Adapter()
        {
            this.legacyCalculator = new Legacy().calculate;
        }
    }
    class Client
    {
        static void Main()
        {
            float result = new Adapter().legacyCalculator(5, 6);
        }
    }

Обычно это достигается с помощью делегата, Func или Action в C #

...