представлять
Режим адаптера (адаптер) состоит в том, чтобы преобразовать интерфейс (метод или атрибут) класса (объект) в другой интерфейс (метод или атрибут), который хочет клиент. Режим адаптера позволяет эти классы (объекты), которые изначально не могли работать вместе из -за несовместимости интерфейса. Быстрая обертка.
текст
Давайте приведем пример. Утка (док) обладает поведением полета (лета) и кряков (кряка), в то время как индейка также обладает поведением полета (лета), ее звук проходит. Если вы настаиваете на реализации действия кряка (кряка) индейки, то мы можем повторно использовать метод кряка утки, но конкретным вызовом должен быть кряка. В настоящее время мы можем создать адаптер индейки, чтобы Турция также поддерживала метод кряка, и Gobble все еще следует называться внутри.
Хорошо, мы начинаем реализовать это шаг за шагом. Во -первых, мы должны определить абстрактное поведение утки и индейки, то есть их соответствующие функции метода:
Кода -копия выглядит следующим образом:
//Утка
var duck = function () {
};
Duck.prototype.fly = function () {
Выбросить новую ошибку («Этот метод должен быть переписан!»);
};
Duck.prototype.quack = function () {
Выбросить новую ошибку («Этот метод должен быть переписан!»);
}
//Турция
var turkey = function () {
};
Turkey.prototype.fly = function () {
Выбросить новую ошибку («Этот метод должен быть переписан!»);
};
Turkey.prototype.gobble = function () {
Выбросить новую ошибку («Этот метод должен быть переписан!»);
};
Затем определите конкретные конструкторы утки и индейки соответственно:
Кода -копия выглядит следующим образом:
//Утка
var mallardduck = function () {
Duck.apply (это);
};
Mallardduck.prototype = new Duck (); // прототип утка
Mallardduck.prototype.fly = function () {
console.log («Может летать на большие расстояния!»);
};
Mallardduck.prototype.quack = function () {
console.log ("Гага! Гага!");
};
//Турция
var wildturkey = function () {
Turkey.apply (это);
};
Wildturkey.prototype = new Turkey (); // прототип индейка
Wildturkey.prototype.fly = function () {
Console.log («Расстояние полета кажется немного коротким!»);
};
WildTurkey.prototype.gobble = function () {
console.log ("Ну и дела!
};
Чтобы сделать Турцию поддержать метод кряка, мы создали новый адаптер индейки, TurkeyAdapter:
Кода -копия выглядит следующим образом:
var turkeyAdapter = function (oturkey) {
Duck.apply (это);
this.oturkey = oturkey;
};
TurkeyAdapter.prototype = new Duck ();
TurkeyAdapter.prototype.quack = function () {
this.oturkey.gobble ();
};
TurkeyAdapter.prototype.fly = function () {
var nfly = 0;
var nlenfly = 5;
for (; nfly <nlenfly;) {
this.oturkey.fly ();
nfly = nfly + 1;
}
};
Конструктор берет объект экземпляра Турции, а затем применяет его с помощью Duck, прототип адаптера которого-утка, а затем он хочет повторно модифицировать метод шарлатанского прототипа, так что метод Oturkey.gobble () называется внутри. Метод мухи также внес некоторые изменения, позволяя индейке летать 5 раз подряд (внутренний вызов также называется собственным методом Oturkey.fly ()).
Вызов метода очень ясно. После тестирования вы узнаете результат:
Кода -копия выглядит следующим образом:
var omallardduck = new mallardduck ();
var owildTurkey = new Wildturkey ();
var oturkeyAdapter = new TurkeyAdapter (OwildTurkey);
// оригинальное поведение утки
omallardduck.fly ();
omallardduck.quack ();
// оригинальное поведение индейки
owildturkey.fly ();
owildturkey.gobble ();
// адаптер поведение индейки (Турция вызывает название метода утки)
OturkeyAdapter.fly ();
OturkeyAdapter.quack ();
Суммировать
Так что, если вы используете режим адаптера? Рекомендуется использовать, если:
1. Используйте существующий объект, но его метод или интерфейс атрибута не соответствует вашим требованиям;
2. Вы хотите создать повторный объект, который может работать с другими не связанными объектами или невидимыми объектами (то есть объектами, которые несовместимы с методами интерфейса или атрибутами);
3. Хотите использовать существующий объект, но вы не можете прототип каждый, чтобы соответствовать его интерфейсу. Адаптер объекта может адаптироваться к своему методу или свойству интерфейса родительского объекта.
Кроме того, режим адаптера и несколько других режимов могут быть запутанными. Вот общая разница:
1. Хотя адаптер и режим моста похожи, начальная точка моста отличается. Цель моста - отделить часть интерфейса и детали реализации, чтобы их можно было изменить легче и относительно независимо. Адаптер означает изменение интерфейса с существующим объектом.
2. Режим декоратора усиливает функции других объектов без изменения его интерфейса, поэтому его соответствующая программа лучше прозрачна, чем адаптер. В результате декоратор поддерживает рекурсивные комбинации, и невозможно использовать адаптер чисто.
3. Прокси -режим определяет прокси для другого объекта, не изменяя его интерфейс.