Паттерн Фасад примеры на C#

Паттерн Фасад— предоставляет унифицированный интерфейс к группе интерфейсов подсистемы. Фасад определяет высокоуровневый интерфейс, упрощающий работу с подсистемой.

Если вам понадобится упростить большой интерфейс или семейство сложных интерфейс или семейство сложных интерфейсов.

Фасад изолирует клиента от сложной подсистемы.

Реализация фасада основана на композиции и делегировании.

Для подсистемы можно реализовать несколько фасадов.

Рассмотрим такой пример, многие из вас управляют автомобилем, ну или по крайне мере представляют, как это делается. Для управления автомобиля его нужно завести, повернув ключ системы зажигания, что приведет к запуску двигателя. Но мы понятия не имеем как это все работает, так как это скрыто все за фасадом.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Паттерн_Фасад
{
    public class Engine //Двигатель
    {
        public void EngineOn()
        {
            Console.WriteLine("Запустили двигатель");
        }
        public void EngineOff()
        {
            Console.WriteLine("Заглушили двигатель");
        }
    }

    public class HeadlightSystem //система работы фар
    {
        public void HeadlightSystemOn()
        {
            Console.WriteLine("Включили фары");
        }

        public void HeadlightSystemOff()
        {
            Console.WriteLine("Выключили фары");
        }
    }

    public class FuelSupplySystem //система подачи топлива
    {
        public void FuelSupplySystemOn()
        {
            Console.WriteLine("Подаем топливо в систему");
        }

        public void FuelSupplySystemOff()
        {
            Console.WriteLine("Прекращаем подачу топлива");
        }
    }

    public class FacadeCar
    {
        Engine engine;
        HeadlightSystem headlightSystem;
        FuelSupplySystem fuelSupplySystem;

        public FacadeCar(Engine engine, HeadlightSystem headlightSystem, FuelSupplySystem fuelSupplySystem)
        {
            this.engine = engine;
            this.headlightSystem = headlightSystem;
            this.fuelSupplySystem = fuelSupplySystem;
        }

        public void KeyStart()
        {
            Console.WriteLine("Повернули ключ зажигания");
            fuelSupplySystem.FuelSupplySystemOn();
            engine.EngineOn();
            headlightSystem.HeadlightSystemOn();
        }

        public void KeyStop()
        {
            Console.WriteLine("Повернули ключ зажигания");
            headlightSystem.HeadlightSystemOff();
            fuelSupplySystem.FuelSupplySystemOff();
            engine.EngineOff();
          
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            FacadeCar car = new FacadeCar(new Engine(),new HeadlightSystem(), new FuelSupplySystem());
            car.KeyStart();

            Console.WriteLine(new string('*',50));

            car.KeyStop();

            Console.ReadKey();
        }
    }
}

Повернули ключ зажигания
Подаем топливо в систему
Запустили двигатель
Включили фары
**************************************************
Повернули ключ зажигания
Выключили фары
Прекращаем подачу топлива
Заглушили двигатель

Преимущества фасада

  • Упрощает использование сложных библиотек и подсистем;
  • Снижает зависимость клиента от внутренней структуры системы;
  • Повышает читаемость и модульность кода.

Недостатки

  • Может скрыть реальные зависимости между компонентами;
  • Чрезмерное использование может привести к излишнему обобщению.

Заключение

Фасад — мощный инструмент, который помогает упростить работу с системами, скрывая за собой сложную логику. В C# он отлично подходит для создания сервисных классов, обёрток над внешними библиотеками и упрощения архитектуры.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.