2015-11-05 4 views
3

Возьмите кучу IProcess. Реализации найдете правильный вариант, основанный на реализации CanProcess.Что такое шаблон дизайна?

public interface IProcess 
{ 
    bool CanProcess(string name); 
    Task Process(); 
} 

public class Processor 
{ 
    private readonly IEnumerable<IProcess> _processors; 

    public Processor(IEnumerable<IProcess> processors) 
    { 
     _processors = processors; 
    } 

    public void Process(string name) 
    { 
     Guard.RequireNonNullOrEmpty(name, "name"); 

     // this could allow for processing multiple matches 
     var processor = _processors.FirstOrDefault(r => r.CanProcess(name)); 
     if (processor!= null) 
     { 
      processor.Process(); 
     } 
    } 
} 

Может кто-нибудь посоветует имя этого шаблона, посмотрел на несколько, но, похоже, не подходит.

+2

Это шаблон 'Command', который также использует шаблон' Tester/Doer'. –

+0

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

+0

Я не думаю, что есть образец, чтобы описать это. Это просто запрос. Не каждый бит кода должен быть связан с формальным шаблоном проектирования. –

ответ

5

Действительно ли это не Command Processor?

+0

То, что я действительно ищу, - это имя шаблона использования 'CanProcess' для поиска реализаций' IProcess', которые могут удовлетворить 'name'. –

+0

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

+0

Хорошо спасибо, я предпочитаю идею, что ее просто запрос, а не Service Location, как это считается анти-шаблоном. –

1

Похож на бедного человека chain of responsibility. Если вместо Processor вы изменяете IProcess (и его реализации), чтобы создать скоррелированную цепочку, вы получите то же поведение, плюс возможность обрабатывать одни и те же данные в разных процессах, если вам это нужно.

+0

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

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