Задача Система поддерживает требуемые данные и поведение, но имеет неподходящий интерфейс



Скачать 462,68 Kb.
страница1/5
Дата23.12.2017
Размер462,68 Kb.
  1   2   3   4   5
Структурные шаблоны проектирования

В сравнении с полностью самостоятельным проектированием, шаблоны обладают рядом преимуществ. Основная польза от использования шаблонов состоит в снижении сложности разработки за счёт готовых абстракций для решения целого класса проблем. Шаблон даёт решению свое имя, что облегчает коммуникацию между разработчиками, позволяя ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация деталей решений: модулей, элементов проекта, — снижается количество ошибок. Применение шаблонов концептуально сродни использованию готовых библиотек кода. Правильно сформулированный шаблон проектирования позволяет, отыскав удачное решение, пользоваться им снова и снова. Набор шаблонов помогает разработчику выбрать возможный, наиболее подходящий вариант проектирования.

Хотя легкое изменение кода под известный шаблон может упростить понимание кода, с применением шаблонов могут быть связаны две сложности. Во-первых, слепое следование некоторому выбранному шаблону может привести к усложнению программы. Во-вторых, у разработчика может возникнуть желание попробовать некоторый шаблон в деле без особых оснований.

Адаптер


Адаптер (англ. Adapter или англ. Wrapper — Обёртка) — структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.

Задача

Система поддерживает требуемые данные и поведение, но имеет неподходящий интерфейс.



Участники

Класс Adapter приводит интерфейс класса Adaptee в соответствие с интерфейсом класса Target (наследником которого является Adapter). Это позволяет объекту Client использовать объект Adaptee (посредством адаптера Adapter) так, словно он является экземпляром класса Target.



Таким образом Client обращается к интерфейсу Target, реализованному в наследнике Adapter, который перенаправляет обращение к Adaptee.



Пример исходного кода

using System;

namespace Adapter

{

class MainApp



{

static void Main()

{

// Create adapter and place a request



Target target = new Adapter();

target.Request();

// Wait for user

Console.Read();

}

}

// "Target"



class Target

{

public virtual void Request()



{

Console.WriteLine("Called Target Request()");

}

}

// "Adapter"



class Adapter : Target

{

private Adaptee adaptee = new Adaptee();



public override void Request()

{

// Possibly do some other work



// and then call SpecificRequest

adaptee.SpecificRequest();

}

}

// "Adaptee"



class Adaptee

{

public void SpecificRequest()



{

Console.WriteLine("Called SpecificRequest()");

}

}

}



Следствия

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



Комментарии

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

Близким Адаптеру является шаблон Фасад, не всегда можно отличить один от другого

Пример применения

Типичным примером использования шаблона Адаптер можно назвать создание классов, приводящих к единому интерфейсу функции языка PHP обеспечивающие доступ к различным СУБД.



Вариант решения данной проблемы с использованием шаблона Адаптер показан на рисунке.




Поделитесь с Вашими друзьями:
  1   2   3   4   5


База данных защищена авторским правом ©grazit.ru 2017
обратиться к администрации

    Главная страница