2017-02-08 21 views
1

Я пытаюсь задрать голову вокруг шаблона адаптера, из всех образцов, которые мне труднее всего представить для использования.Является сопоставителем версии адаптера.

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

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

Есть ли разница или они разные названия для одного и того же?

ответ

2

Подумайте об адаптере не как о создателе новых объектов (например, о Mapper), а как о трансфере интерфейса.

Mapper m = new Mapper() 
Dog dog = (Dog) m.mapRow(resultSet); // creating new object 

Экземпляр кошки все еще существует здесь, новый "экземпляр собаки не создается, а экземпляр DogAdapter создается и«адаптирует»объект кошки интерфейс собаки.

Cat cat = new Cat("Felix"); 
Dog dog = new DogAdapter(cat); // cat still exists 
dog.bark(); // yields 'meow' 

Это, очевидно, надуманные примеры, но, надеюсь, они помогут вам лучше понять.

+0

Благодарим за хороший пример, и это имеет смысл, не могли бы вы объяснить, зачем вам это нужно? Вместо простого варианта? Разрешить ли какие-либо обновления кошке распространяться на приспособленный к собаке объект? Является ли это вопросом статических свойств и динамически обновляемого свойства? – berimbolo

+0

Иногда более дорогое копирование данных для поддержки целевого интерфейса (в данном случае Dog является целевым интерфейсом), чем просто переводить вызовы. Адаптация удаленного интерфейса к другому интерфейсу - еще один пример, когда свойства могут изменяться на основе данных бэкэнд, вы не хотите копировать атрибуты, потому что это обеспечило бы «моментальный снимок», а не «текущее» значение. –

 Смежные вопросы

  • Нет связанных вопросов^_^