2015-06-23 4 views
2

Рассмотрите следующий дизайн, я сомневаюсь, если бы я правильно применил шаблон дизайна Facade. Меня беспокоит то, что я манипулировал простым запросом, исходящим от клиента; и не наивно делегировать запрос инкапсулированному типу: ComplexWorker. Это нормально? Разве это не шаблон дизайна Wrapper?Дизайн фасада Образец: Преобразование запроса клиента

class WorkFacade 
{ 
    public void Work(SimpleRequest simpleRequest) 
    { 
     ComplexRequest = new ComplexRequest(simpleRequest); 
     ComplexRequest.RequestTime = DateTime.Now; 
     ComplexRequest.UserId = 120; 
     new ComplexWorker().Work(ComplexRequest, 2015, 6, 7, 23, 12, 1); 
    } 
} 

class ComplexRequest 
{ 
    ComplexRequest(SimpleRequest request) 
    { 
      // Code to convert simple request to complex request 
      // understandable by ComplexRequest 
    } 
} 

class ComplexWorker 
{ 
    void Work(ComplexRequest request) 
    { 
     //... 
    } 
} 

ответ

2

Да, вы внедрили узор фасад.

Тот, кто пользуется вашим Фасадом, может воспользоваться тем, что не обязательно знаком с подсистемами (ComplexRequest и ComplexWorker в вашем примере). Это означает, что вы предоставили для клиента высокоуровневый и унифицированный интерфейс. Вот что такое Фасад. Таким образом, вы используете информацию, скрывающую принцип.

Паттерн Wrapper, или, как он более известен, - Adapter pattern, решает другую проблему. Это помогает вам работать с несовместимыми интерфейсами. Обычно это помогает адаптировать соответствие импеданса старого компонента к новой системе.

+1

'Information Hiding'; вот что я искал. – Hans

Смежные вопросы