Приклади реалізації паттерну Adapter на C#
Перед розглядом даної теми рекомендується ознайомитись з наступною темою:
Зміст
Пошук на інших ресурсах:
1. Структура паттерну Adapter
Паттерн Adapter має два різновиди, які відрізняються реалізацією та отриманими результатами:
- адаптер для класу (рисунок 1). У цьому випадку використовується механізм успадкування;
- адаптер для об’єкту (рисунок 2). У цьому випадку використовується композиція об’єктів.
Рисунок 1. Адаптер для класу. Структурна схема
Рисунок 2. Адаптер для об’єкту. Структурна схема
⇑
2. Адаптер для класу
Нижче наведено реалізацію паттерну Адаптер для класу, яка містить такі самі імена як зображено на рисунку 1.
// Паттерн Адаптер для класу. Розв'язок на мові 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 та успадковує клас 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#. Лабораторна робота. Адаптація трьох методів
⇑