Накопичувач (шаблон проєктування) — Вікіпедія

Накопичувач (англ. Collecting Parameter) — шаблон проєктування, який пропонує накопичувати повідомлення про стан об'єкту.

Реалізація[ред. | ред. код]

Нехай, необхідно показувати повідомлення про зміну стану об'єкту. Оскільки наперед не відомо середовище розгортання даного об'єкту, накопичуватимемо повідомлення в пам'яті, а відповідальність відображення реалізуємо в залежності від середовища.

typedef vector<string> CollectingParameter;  struct Filler {     void f(CollectingParameter& cp)     {         cp.push_back("accumulating");         // Do something else     }          void g(CollectingParameter& cp)     {         cp.push_back("items");         // Do something else     }          void h(CollectingParameter& cp)     {         cp.push_back("as we go");         // Do something else     } };  void main() {     Filler filler;     CollectingParameter cp;     filler.f(cp);     filler.g(cp);     filler.h(cp);          // вивід повідомлень залежить від середовища, наприклад, у консоль     // вебсервер міг би показувати дані у вигляді сторінки, тощо     for (vector<string>::iterator it = cp.begin(); it != cp.end(); ++it)     {         cout << *it << ' ';     } } 

Даний шаблон може бути корисний, коли необхідно виконати відкладену валідацію.

public class HomeController {     public ActionResult Index(string value)     {         if(string.IsNullOrEmpty(value))         {             ModelState.AddModelError("value", "There is something wrong with value.");         }                  . . .         IEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);         . . .     } } 

Одна із різновидностей цього шаблону передбачає для накопичення повідомлень використовувати властивості, а не структуру даних.

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]