2024-10-05 09:30:14 +03:00
|
|
|
|
/*
|
2025-05-12 03:44:31 +03:00
|
|
|
|
* Author: Nikolay Dvurechensky
|
|
|
|
|
* Site: https://www.dvurechensky.pro/
|
|
|
|
|
* Gmail: dvurechenskysoft@gmail.com
|
|
|
|
|
* Last Updated: 12 мая 2025 03:39:52
|
|
|
|
|
* Version: 1.0.4
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*
|
2024-10-05 09:30:14 +03:00
|
|
|
|
* СТРУКТУРНЫЕ ПАТТЕРНЫ
|
|
|
|
|
*
|
|
|
|
|
* Глава_12: Адаптер (Adapter)
|
|
|
|
|
*
|
|
|
|
|
* - преобразует интерфейс одного класса в интерфейс другого, который
|
|
|
|
|
* ожидают клиенты. Адаптер делает возможной совместную работу
|
|
|
|
|
* классов с несовместимыми интерфейсами
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
class Motorcycle { }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Что адаптируем
|
|
|
|
|
/// </summary>
|
|
|
|
|
class Voskhod : Motorcycle
|
|
|
|
|
{
|
|
|
|
|
public void Sound() => Console.WriteLine("DRDRDR");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Цель на которую нужно ориентироваться при адаптации
|
|
|
|
|
/// </summary>
|
|
|
|
|
interface Isport
|
|
|
|
|
{
|
|
|
|
|
void MakeNoise();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Пример готового объекта aдаптированного под цель
|
|
|
|
|
/// </summary>
|
|
|
|
|
class Honda : Motorcycle, Isport
|
|
|
|
|
{
|
|
|
|
|
public void MakeNoise() => Console.WriteLine("hooondaaa");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Адаптер
|
|
|
|
|
/// Адаптирует простой класс под цель
|
|
|
|
|
/// </summary>
|
|
|
|
|
class TuningVoskhod : Isport
|
|
|
|
|
{
|
|
|
|
|
Voskhod moto;
|
|
|
|
|
public TuningVoskhod(Voskhod moto) => this.moto = moto;
|
|
|
|
|
public void MakeNoise()
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("trsh");
|
|
|
|
|
moto.Sound();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Program
|
|
|
|
|
{
|
|
|
|
|
public static void Main(string[] args)
|
|
|
|
|
{
|
|
|
|
|
var tun = new TuningVoskhod(new Voskhod());
|
|
|
|
|
tun.MakeNoise();
|
|
|
|
|
}
|
|
|
|
|
}
|