🎉 Ура! Після трьох років роботи, я нарешті випустив англійську версію книжки про патерни! Ось вона »

C#: Фасад

Facade Фасад Facade

Фасад — це структурний патерн, який надає простий (але урізаний) інтерфейс до складної системи об’єктів, бібліотеки або фреймворку.

Крім того, що Фасад дозволяє знизити загальну складність програми, він також допомагає винести код, який залежить від зовнішньої системи, в одне місце.

Детальніше про Фасад

Особливості паттерна на C#

Складність:

Популярність:

Застосування: Патерн часто зустрічається в клієнтських додатках, написаних на C#, які використовують складні бібліотеки або API.

Ознаки застосування патерну: Фасад впізнається у класі, який має простий інтерфейс, але делегує основну частину роботи іншим класам. Найчастіше, фасади самі стежать за життєвим циклом об’єктів складної системи.

Приклад: Структура патерну

Цей приклад показує структуру патерну Фасад, а саме — з яких класів він складається, які ролі ці класи виконують і як вони взаємодіють один з одним.

Program.cs: Приклад структури патерну

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

namespace RefactoringGuru.DesignPatterns.Facade.Structural
{
    class Program
    {
        static void Main(string[] args)
        {
            Client client = new Client();

            Subsystem1 s1 = new Subsystem1();
            Subsystem2 s2 = new Subsystem2();
            Facade facade = new Facade(s1, s2);
            client.ClientCode(facade);
        }
    }

    class Client
    {
        internal void ClientCode(Facade facade)
        {
            Console.WriteLine(facade.Operation());
        }
    }

    public class Subsystem1
    {
        public string operation1()
        {
            return "Subsystem1: Ready!\n";
        }

        public string operationN()
        {
            return "Subsystem1: Go!\n";
        }
    }
	
    public class Subsystem2
    {
        public string operation1()
        {
            return "Subsystem2: Get ready!\n";
        }

        public string operationZ()
        {
            return "Subsystem2: Fire!\n";
        }
    }

    public class Facade
    {
        Subsystem1 Subsystem1;
		
        Subsystem2 Subsystem2;

        public Facade(Subsystem1 s1, Subsystem2 s2)
        {
            this.Subsystem1 = s1;
            this.Subsystem2 = s2;
        }
		
        public string Operation()
        {
            string result = "Facade initializes subsystems:\n";
            result += Subsystem1.operation1();
            result += Subsystem2.operation1();
            result += "Facade orders subsystems to perform the action:\n";
            result += Subsystem1.operationN();
            result += Subsystem2.operationZ();
            return result;
        }
    }
}

Output.txt: Результат виконання

Facade initializes subsystems:
Subsystem1: Ready!
Subsystem2: Get ready!
Facade orders subsystems to perform the action:
Subsystem1: Go!
Subsystem2: Fire!