Фасад (Facade) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Участники)
(Пример)
Строка 29: Строка 29:
 
=== Пример ===
 
=== Пример ===
 
<source lang="Csharp">
 
<source lang="Csharp">
 +
class MainApp
 +
{
 +
    public static void Main()
 +
    {
 +
        Facade facade = new Facade();
 +
 +
        facade.MethodA();
 +
        facade.MethodB();
 +
    }
 +
}
 +
 +
class SubSystemOne
 +
{
 +
    public void MethodOne()
 +
    {
 +
        Console.WriteLine(" SubSystemOne Method");
 +
    }
 +
}
 +
 +
class SubSystemTwo
 +
{
 +
    public void MethodTwo()
 +
    {
 +
        Console.WriteLine(" SubSystemTwo Method");
 +
    }
 +
}
 +
 +
class SubSystemThree
 +
{
 +
    public void MethodThree()
 +
    {
 +
        Console.WriteLine(" SubSystemThree Method");
 +
    }
 +
}
 +
 +
class Facade
 +
{
 +
    SubSystemOne one;
 +
    SubSystemTwo two;
 +
    SubSystemThree three;
 +
 +
    public Facade()
 +
    {
 +
        one = new SubSystemOne();
 +
        two = new SubSystemTwo();
 +
        three = new SubSystemThree();
 +
    }
 +
 +
    public void MethodA()
 +
    {
 +
        Console.WriteLine("\nMethodA() ---- ");
 +
        one.MethodOne();
 +
        two.MethodTwo();
 +
    }
 +
 +
    public void MethodB()
 +
    {
 +
        Console.WriteLine("\nMethodB() ---- ");
 +
        two.MethodTwo();
 +
        three.MethodThree();
 +
    }
 +
}
 
</source>
 
</source>
  

Версия 09:49, 5 августа 2014

К основной странице курса

Назначение

Предоставляет простой интерфейс к большой системе, которая обычно представляет множество взаимосвязанных классов.

Описание

Разбиение на подсистемы и сведение к минимуму зависимостей подсистем - цель любого проектирования. Один из способов решения этой задачи - представление объекта Фасад, предоставляющего единый упрощенный интерфейс к сложной системе.

Назначение

Паттерн Фасад используется:

  • когда требуется предоставить простой интерфейс к сложной подсистеме
  • когда необходимо отделить подсистему от клиентов, повышая переносимость
  • когда требуется разбить подсистему на слои. Если подсистемы зависят друг от друга, то можно разрешить им обмениваться информацией только через фасады

Реализация

Диаграмма классов

FacadeCommon.png

Участники

  • Facade - фасад

Знает, каким классам подсистемы адресовать запрос Делегирует запросы клиентов подходящим объектам внутри подсистемы

  • Классы подсистемы
  • Реализуют функциональность подсистемы
  • Выполняют работу, порученную объекту Facade
  • Ничего не знают о существовании фасада

Пример

class MainApp
{
    public static void Main()
    {
        Facade facade = new Facade();

        facade.MethodA();
        facade.MethodB();
    }
}

class SubSystemOne
{
    public void MethodOne()
    {
        Console.WriteLine(" SubSystemOne Method");
    }
}

class SubSystemTwo
{
    public void MethodTwo()
    {
        Console.WriteLine(" SubSystemTwo Method");
    }
}

class SubSystemThree
{
    public void MethodThree()
    {
        Console.WriteLine(" SubSystemThree Method");
    }
}

class Facade
{
    SubSystemOne one;
    SubSystemTwo two;
    SubSystemThree three;

    public Facade()
    {
        one = new SubSystemOne();
        two = new SubSystemTwo();
        three = new SubSystemThree();
    }

    public void MethodA()
    {
        Console.WriteLine("\nMethodA() ---- ");
        one.MethodOne();
        two.MethodTwo();
    }

    public void MethodB()
    {
        Console.WriteLine("\nMethodB() ---- ");
        two.MethodTwo();
        three.MethodThree();
    }
}

Достоинства и недостатки

Варианты