Подтвердить что ты не робот

Что такое шаблон дизайна фасадов?

Является ли Facade классом, который содержит много других классов?

Что делает его образцом дизайна? Для меня это как обычный класс.

Можете ли вы объяснить мне этот шаблон фасада?

4b9b3361

Ответ 1

Шаблон проектирования - это общий способ решения повторяющейся проблемы. Классы во всех шаблонах проектирования - это обычные классы. Важно то, как они структурированы и как они работают вместе, чтобы решить данную проблему наилучшим образом.

Шаблон проектирования Facade упрощает интерфейс к сложной системе; потому что он обычно состоит из всех классов, которые составляют подсистемы сложной системы.

A Facade защищает пользователя от сложных деталей системы и предоставляет simplified view simplified view, который равен easy to use. Он также decouples код, который использует систему из деталей подсистем, что упрощает модификацию системы позже.

http://www.dofactory.com/Patterns/PatternFacade.aspx

http://www.blackwasp.co.uk/Facade.aspx

Кроме того, что важно при изучении шаблонов проектирования, так это возможность распознавать, какой шаблон соответствует вашей задаче, а затем использовать ее соответствующим образом. Очень часто неправильно использовать шаблон или пытаться подгонять его к какой-то проблеме только потому, что вы это знаете. Помните об этих подводных камнях, изучая\используя шаблоны проектирования.

Ответ 2

Wikipedia имеет отличный пример шаблона фасада.

/* Complex parts */

class CPU {
    public void freeze() { ... }
    public void jump(long position) { ... }
    public void execute() { ... }
}

class Memory {
    public void load(long position, byte[] data) { ... }
}

class HardDrive {
    public byte[] read(long lba, int size) { ... }
}

/* Facade */

class ComputerFacade {
    private CPU processor;
    private Memory ram;
    private HardDrive hd;

    public ComputerFacade() {
        this.processor = new CPU();
        this.ram = new Memory();
        this.hd = new HardDrive();
    }

    public void start() {
        processor.freeze();
        ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        processor.jump(BOOT_ADDRESS);
        processor.execute();
    }
}

/* Client */

class You {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.start();
    }
}

Ответ 3

Как объясняется в предыдущем ответе, он обеспечивает простой интерфейс для потребителя. Например: "смотреть ESPN" - это назначенная функция. Но он включает в себя несколько шагов, например:

  • При необходимости включите телевизор;
  • Проверить работу спутника/кабеля;
  • При необходимости переключитесь на ESPN.

Но фасад упростит это и просто предоставит клиенту функцию "смотреть ESPN".

Ответ 4

Фасад скрывает сложность системы и обеспечивает интерфейс для клиента, с которого клиент может получить доступ к системе.

public class Inventory {
public String checkInventory(String OrderId) {
    return "Inventory checked";
}
}

public class Payment {
public String deductPayment(String orderID) {
    return "Payment deducted successfully";
}
}


public class OrderFacade {
private Payment pymt = new Payment();
private Inventory inventry = new Inventory();

public void placeOrder(String orderId) {
    String step1 = inventry.checkInventory(orderId);
    String step2 = pymt.deductPayment(orderId);
    System.out
            .println("Following steps completed:" + step1
                    + " & " + step2);
   }
}

public class Client {
       public static void main(String args[]){
         OrderFacade orderFacade = new OrderFacade();
         orderFacade.placeOrder("OR123456");
         System.out.println("Order processing completed");
       }
  }

Ответ 5

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

Ответ 6

Шаблон фасада является оболочкой многих других интерфейсов в результате для создания более простого интерфейса.

Шаблоны проектирования полезны, поскольку они решают повторяющиеся проблемы и в целом упрощают код. В команде разработчиков, которые согласны использовать одни и те же шаблоны, это повышает эффективность и понимание при сохранении кода друг друга.

Попробуйте прочитать больше шаблонов:

Фасад: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1

или более широко: http://www.dofactory.com/Patterns/Patterns.aspx

Ответ 7

Краткое и простое объяснение:

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

Попытайтесь понять сценарий с фазами и без них:
Если вы хотите перенести деньги с accout1 на счет2, то две подсистемы, которые будут вызываться, выйдут из учетной записи 1 и внесены на счет2.

with and without facade

Ответ 8

Еще одно использование шаблона Façade может заключаться в уменьшении кривой обучения вашей команды. Позвольте мне привести вам пример:

Предположим, что ваше приложение должно взаимодействовать с MS Excel, используя объектную модель COM, предоставленную Excel. Один из членов вашей команды знает все API-интерфейсы Excel, и он создает над ним фасад, который удовлетворяет всем основным сценариям приложения. Никому другому члену команды не нужно тратить время на изучение Excel API. Команда может использовать фасад, не зная внутренних элементов или всех объектов MS Excel, участвующих в выполнении сценария. Разве это не здорово?

Таким образом, он обеспечивает упрощенный и унифицированный интерфейс поверх сложной подсистемы.

Ответ 9

Фасад предоставляет упрощенные функции, которые в основном называются, и реализация скрывает сложность, с которой в противном случае клиенты могли бы иметь дело. В целом реализация использует в нем несколько пакетов, классов и функций. Хорошо написанные фасады делают прямой доступ к другим классам редкими. Например, когда я посещаю банкомат и снимаю некоторую сумму. Банкомат скрывает, идет ли он прямо в принадлежащий ему банк или идет по согласованной сети для внешнего банка. Банкомат действует как фасад, потребляющий несколько устройств и подсистем, которые, как клиент, с которыми мне не нужно напрямую обращаться.

Ответ 10

Фасад - это класс с уровнем функциональности, который находится между инструментарием и полным приложением, предлагая упрощенное использование классов в пакете или подсистеме. Цель шаблона Facade - предоставить интерфейс, который упрощает использование подсистемы.  - Извлечь из book Дизайн шаблонов на С#.

Ответ 11

Относительно ваших запросов:

Является ли Facade классом, который содержит много других классов?

Да. Это оболочка для многих подсистем в приложении.

Что делает его образцом дизайна? Для меня это как обычный класс

Все шаблоны проектирования также являются нормальными классами. @Unmesh Kondolikar справедливо ответил на этот запрос.

Можете ли вы объяснить мне об этом Facade, я новичок в разработке шаблонов.

В соответствии с GoF, Фасад шаблон дизайна игнорируется как:

Обеспечить унифицированный интерфейс для набора интерфейсов в подсистеме. Facade Pattern определяет интерфейс более высокого уровня, который упрощает использование подсистемы

Facade шаблон обычно используется, когда:

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

Возьмем настоящий пример сайта cleartrip.

Этот веб-сайт предоставляет варианты бронирования

  • Авиабилеты
  • Отели
  • Авиабилеты + Отели

Фрагмент кода:

import java.util.*;

public class TravelFacade{
    FlightBooking flightBooking;
    TrainBooking trainBooking;
    HotelBooking hotelBooking;

    enum BookingType {
        Flight,Train,Hotel,Flight_And_Hotel,Train_And_Hotel;
    }; 

    public TravelFacade(){
        flightBooking = new FlightBooking();
        trainBooking = new TrainBooking();
        hotelBooking = new HotelBooking();        
    }
    public void book(BookingType type, BookingInfo info){
        switch(type){
            case Flight:
                // book flight;
                flightBooking.bookFlight(info);
                return;
            case Hotel:
                // book hotel;
                hotelBooking.bookHotel(info);
                return;
            case Train:
                // book Train;
                trainBooking.bookTrain(info);
                return;
            case Flight_And_Hotel:
                // book Flight and Hotel
                flightBooking.bookFlight(info);
                hotelBooking.bookHotel(info);
                return;
             case Train_And_Hotel:
                // book Train and Hotel
                trainBooking.bookTrain(info);
                hotelBooking.bookHotel(info);
                return;                
        }
    }
}
class BookingInfo{
    String source;
    String destination;
    Date    fromDate;
    Date     toDate;
    List<PersonInfo> list;
}
class PersonInfo{
    String name;
    int       age;
    Address address;
}
class Address{

}
class FlightBooking{
    public FlightBooking(){

    }
    public void bookFlight(BookingInfo info){

    }
}
class HotelBooking{
    public HotelBooking(){

    }
    public void bookHotel(BookingInfo info){

    }
}
class TrainBooking{
    public TrainBooking(){

    }
    public void bookTrain(BookingInfo info){

    }
}

Пояснение:

  • FlightBooking, TrainBooking and HotelBooking - разные подсистемы большой системы: TravelFacade

  • TravelFacade предлагает простой интерфейс для бронирования одного из следующих вариантов.

    Flight Booking
    Train Booking 
    Hotel Booking
    Flight + Hotel booking 
    Train + Hotel booking
    
  • API книги от TravelFacade внутренне вызывает ниже API-интерфейсов подсистем

    flightBooking.bookFlight
    trainBooking.bookTrain(info);
    hotelBooking.bookHotel(info);
    
  • Таким образом, TravelFacade обеспечивает упрощение и упрощение API без использования подсистемных API.

Ключевые вынос: (из journaldev статьи Панкаджа Кумара)

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

Посмотрите на статью sourcemaking для лучшего понимания.

Ответ 12

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

Источник: https://sourcemaking.com/design_patterns/facade

Ответ 13

Другой пример фасада: скажем, ваше приложение подключается к базе данных и отображает результаты в пользовательском интерфейсе. Вы можете использовать фасад, чтобы настроить ваше приложение, как при запуске с использованием базы данных или с макетными объектами. Таким образом, вы сделаете все вызовы базы данных в класс фасада, где он будет читать конфигурацию приложения и решают запустить запрос db или вернуть макет. таким образом, приложение становится независимым от db в случае, если db недоступен.

Ответ 14

Шаблон проектирования является общим многоразовым решением общей проблемы в данном контексте при разработке программного обеспечения.

Шаблон проектирования Facade является структурным шаблоном, поскольку он определяет способ создания отношений между классами или сущностями. Шаблон проектирования фасада используется для определения упрощенного интерфейса для более сложной подсистемы.

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

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

Одним из примеров использования шаблона фасада является интеграция веб-сайта с бизнес-приложением. Существующее программное обеспечение может включать в себя большие объемы бизнес-логики, к которым необходимо получить доступ определенным образом. Веб-сайт может потребовать ограниченного доступа к этой бизнес-логике. Например, веб-сайту может потребоваться указать, достиг ли товар для продажи ограниченным уровнем запасов. Метод IsLowStock класса facade может вернуть значение Boolean, чтобы указать это. За кулисами этот метод может скрывать сложности обработки текущего физического запаса, входящего запаса, выделенных предметов и низкого уровня запасов для каждого элемента.

Ответ 15

Существует очень хороший пример реальной картины - двигатель стартера автомобиля.

В качестве драйверов мы просто включаем ключ и начинаем работу с автомобилем. Как можно проще. За кулисами задействовано много других автомобильных систем (как аккумулятор, двигатель, топливо и т.д.), Чтобы автомобиль начал успешно, но они скрыты за стартером.

Как вы можете видеть, стартер автомобиля - это Фасад. Это дает нам простой в использовании интерфейс, не беспокоясь о сложности всех других автомобильных систем.

Подведем итог:

Шаблон Facade упрощает и скрывает сложность больших блоков кода или API, обеспечивая более чистый, понятный и простой в использовании интерфейс.

Ответ 16

Все шаблоны проектирования - это некоторые классы, которые так или иначе соответствуют конкретному приложению. Цель шаблона фасада - скрыть сложность операции или операций. Вы можете увидеть пример и изучить шаблон фасада из http://preciselyconcise.com/design_patterns/facade.php

Ответ 17

Это, в основном, система оформления одного окна. Вы назначаете любую работу, которую он делегирует определенному методу в другом классе.

Ответ 19

Шаблон дизайна фасада находится под шаблоном структурного проектирования. Короче говоря, Facade означает внешний вид. Это означает, что в шаблоне проектирования фасадов мы что-то скрываем и показываем только то, что требует клиент. Читать дальше в блоге: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html

Ответ 20

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