Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Турчин Д.Е. - Архитектура ИС. Практикум 2014 (И...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.42 Mб
Скачать

Реализация шаблона Адаптер на языке c#.

Простейший пример реализации шаблона Адаптер объекта на языке C# представлен в листинге 5.1.

Листинг 5.1. Пример реализации шаблона Адаптер объекта на языке C#

// Представляет целевой интерфейс

public interface ITarget

{

void Request();

}

// Представляет адаптируемые объекты

class Adapted

{

public void SpecificRequest()

{

Console.WriteLine("Вызван SpecificRequest()");

}

}

// Представляет объекты-адаптеры

public class Adapter : ITarget

{

Adapted adapted = new Adapted();

public void Request()

{

adapted.SpecificRequest();

}

}

// Клиент

class Client

{

static void Main(string[] args)

{

ITarget target = new Adapter();

target.Request();

}

}

Отличие реализации шаблона Адаптер класса будет заключаться только в коде класса Adapter (листинг 5.2).

Листинг 5.2. Исходный код класса Adapter для шаблона Адаптер класса

// Представляет объекты-адаптеры

public class Adapter : Adapted, ITarget

{

public void Request()

{

base.SpecificRequest();

}

}

В результате выполнения представленного кода в окне консоли будет выведен текст «Вызван SpecificRequest()», означающий, что был вызван соответствующий метод класса Adapted.

Пример 5.1. Реализация шаблона Адаптер в приложении на языке C#.

Требуется разработать приложение на языке C#, в котором для обеспечения совместимости интерфейсов используется шаблон Адаптер. Приложение должно состоять из библиотеки классов, содержащей адаптируемый класс, консольного приложения, выступающего в роли клиента, а также из библиотеки, содержащей целевой интерфейс и класс-адаптер.

Адаптируемый класс: Pool (представляет бассейны с водой).

Атрибуты:

# maxH : double – максимальный уровень воды, см;

# curH : double – текущий уровень воды, см;

# poolS : double – площадь дна бассейна, м2;

# holeS : double – площадь отверстия для слива воды, cм2.

Операции:

+ CurrentH : int – возвращает и устанавливает текущий уровень воды в бассейне (свойство);

+ GetPourDownT(h : double) : int – определить время, за которое уровень воды опустится до h;

+ ToString() : string – возвращает строку с данными об объекте.

Требуемый интерфейс:

+ CurrentHeight : double – возвращает текущий уровень воды;

+ ModifH(dH : double) : void – изменить уровень воды в бассейне на величину dH, м;

+ CalcPourDownT() : int – определить время, за которое из бассейна выльется вся вода, с;

+ GetStringData() : string – возвращает строку с данными об объекте.

Время вытекания жидкости из сосуда можно найти следующим образом:

;

где S – площадь дна сосуда; σ – площадь отверстия в сосуде; H – уровень жидкости относительно дна сосуда; h – уровень, до которого опустится жидкость.

Рис. 5.3. Диаграмма классов проекта

Листинг 5.3. Исходный код класса Pool (адаптируемый класс, Часть 1)

Листинг 5.3. Исходный код класса Pool (адаптируемый класс, Часть 2)

Листинг 5.4. Исходный код интерфейса ITarget (целевой интерфейс)

Листинг 5.5. Исходный код класса PoolObjAdapter

Листинг 5.6. Исходный код класса Program консольного приложения (клиент)

Результат работы консольного приложения показан на рис. 5.4. ❒

Рис. 5.4. Результат работы приложения