Повторные свойств шаблона проектирования

я DownloadManager класса, который управляет несколькими DownloadItem объекты. Каждый элемент DownloadItem события как ProgressChanged и DownloadCompleted. Обычно вы хотите использовать один и тот же обработчик для все скачать элементов, так что это немного раздражает, чтобы установить обработчики событий снова и снова для каждого DownloadItem.

Таким образом, мне нужно решить, какой шаблон использовать:

  1. Используйте DownloadItem в виде шаблона и клонировать его по мере необходимости

        var dm = DownloadManager();
        var di = DownloadItem();
        di.ProgressChanged += new DownloadProgressChangedEventHandler(di_ProgressChanged);
        di.DownloadCompleted += new DownloadProgressChangedEventHandler(di_DownloadCompleted);
        DownloadItem newDi;
        newDi = di.Clone();
        newDi.Uri = "http://google.com";
        dm.Enqueue(newDi);
        newDi = di.Clone();
        newDi.Uri = "http://yahoo.com";
        dm.Enqueue(newDi);
    
  2. Установить обработчики событий на DownloadManager и вместо того, чтобы иметь его копию события для каждого DownloadItem, enqeued.

        var dm = DownloadManager();
        dm.ProgressChanged += new DownloadProgressChangedEventHandler(di_ProgressChanged);
        dm.DownloadCompleted += new DownloadProgressChangedEventHandler(di_DownloadCompleted);
        dm.Enqueue(new DownloadItem("http://google.com"));
        dm.Enqueue(new DownloadItem("http://yahoo.com"));
    
  3. Или использовать какой-то фабрики

        var dm = DownloadManager();
        var dif = DownloadItemFactory();
        dif.ProgressChanged += new DownloadProgressChangedEventHandler(di_ProgressChanged);
        dif.DownloadCompleted += new DownloadProgressChangedEventHandler(di_DownloadCompleted);
        dm.Enqueue(dif.Create("http://google.com"));
        dm.Enqueue(dif.Create("http://yahoo.com"));
    

Что бы вы порекомендовали?

Найдено 2 ответа:

Repeated properties design pattern

http://stackoverflow.com/questions/2748608/repeated-properties-design-pattern

Посмотреть решение →