Примеры реализации паттерна Adapter на C#
Перед изучением данной темы рекомендуется ознакомиться со следующей темой:
Содержание
Search other websites:
1. Структура паттерна Adapter
Паттерн Adapter имеет две разновидности, которые отличаются реализацией и полученными результатами:
- адаптер для класса (рисунок 1). В этом случае используется механизм наследования;
- адаптер для объекта (рисунок 2). В этом случае используется композиция объектов.
Рисунок 1. Адаптер для класса. Структурная схема
Рисунок 2. Адаптер для объекта. Структурная схема
⇑
2. Адаптер для класса
Ниже приведена реализация паттерна Адаптер для класса, которая содержит такие же имена как изображено на рисунке 1.
// Паттерн Адаптер для класса. Решение на языке C# using System; using static System.Console; namespace ConsoleApp10 { // Адаптирует класс Adaptee к интерфейсу ITarget через промежуточный класс Adapter // Інтерфейс ITarget interface ITarget { public void Request(); } // Класс, метод которого нужно адаптировать к другой системе. // В данном случае адаптируется имя метода SpecificRequest() в метод Request() class Adaptee { // Некоторый специфический метод public void SpecificRequest() { WriteLine("Adaptee.SpecificRequest()"); } } // Класс Adapter - реализует интерфейс ITarget и наследует класс Adaptee class Adapter : Adaptee, ITarget { // Реализация метода Request() интерфейса ITarget public void Request() { // Всередине метода вызывается метод SpecificRequest() класса Adaptee() SpecificRequest(); } } // Класс Client - получает ссылку на интерфейс ITarget class Client { // некоторый метод класса Client public void ClientMethod(ITarget target) { target.Request(); } } class Program { static void Main(string[] args) { // Демонстрация паттерна Adapter для класса. // Задание. // Нужно адаптировать экземпляр класса Adaptee к потребностям экземпляра класса Client. // 1. Создать экземпляр класса Client Client client = new Client(); // 2. Создать экземпляр класса Adapter, который ссылается на интерфейс ITarget ITarget target = new Adapter(); // 3. Передать клиенту target client.ClientMethod(target); } } }
⇑
3. Адаптер для объекта
Следующий код демонстрирует реализацию паттерна Адаптер для объекта из рисунка 2.
// Паттерн Адаптер для объекта. Решение на языке C# using System; using static System.Console; namespace ConsoleApp10 { // Адаптирует класс Adaptee к интерфейсу Target через промежуточный класс Adapter // Интерфейс ITarget interface ITarget { public void Request(); } // Класс, метод которого нужно адаптировать к другой системе. // В даном случае адаптируется имя метода SpecificRequest() в метод Request() class Adaptee { // Некоторый специфический метод public void SpecificRequest() { WriteLine("Adaptee.SpecificRequest()"); } } // Класс Adapter - реализует интерфейс ITarget class Adapter : ITarget { private Adaptee adaptee; // ссылка на Adaptee // Конструктор public Adapter(Adaptee adaptee) { // инициализировать внутреннюю ссылку adaptee параметром this.adaptee = adaptee; } // Реализация метода Request() интерфейса ITarget public void Request() { // Всередине метода вызывается метод SpecificRequest() класса Adaptee() adaptee.SpecificRequest(); } } // Класс Client - получает ссылку на интерфейс ITarget class Client { // некоторый метод класса Client public void ClientMethod(ITarget target) { target.Request(); } } class Program { static void Main(string[] args) { // Демонстрация паттерна Adapter для объекта. // Задание. // Нужно адаптировать экземпляр класса Adaptee к потребностям экземпляра класса Client. // 1. Пусть заданы некоторые экземпляры классов Client и Adaptee Client client = new Client(); Adaptee adaptee = new Adaptee(); // 2. Создать экземпляр класса Adapter, передать экземпляр класса Adaptee // в конструктор класса Adapter ITarget target = new Adapter(adaptee); // 3. Передать клиенту target client.ClientMethod(target); } } }
⇑
Связанные темы
- Обзор и исследование паттерна. Примеры реализации на C++
- Примеры реализации паттерна Adapter на Java
- Решение задачи с использованием паттерна Adapter на Java и C#. Лабораторная работа. Адаптация трех методов
⇑