Если какой-либо компонент полагается на конфигурацию, которая может быть изменена во время выполнения (например, поддержка темы для виджетов), вам необходимо предоставить некоторый механизм обратного вызова или сигнализации для уведомления об измененной конфигурации. Поэтому недостаточно передать компоненту только необходимые параметры во время создания (например, цвет). Вам также необходимо предоставить доступ к конфигурации изнутри компонента (передать полную конфигурацию компоненту) или создать фабрику компонентов, которая хранит ссылки на конфигурацию и все созданные ею компоненты, чтобы она могла в конечном итоге применить изменения.
У первого есть большой недостаток: он загромождает конструкторы или взрывает интерфейс, хотя, возможно, он самый быстрый для прототипирования. Если принять во внимание «Закон Деметры», это большой отказ, потому что он нарушает инкапсуляцию. У последнего есть то преимущество, что компоненты сохраняют свой особый интерфейс, где компоненты берут только то, что им нужно, и в качестве бонуса дает вам центральное место для рефакторинга (фабрику). В долгосрочной перспективе при обслуживании кода, вероятно, выиграет от фабричного паттерна.
Кроме того, даже если бы фабрика была одноэлементной, она, вероятно, использовалась бы в гораздо меньшем количестве мест, чем синглтон конфигурации.
person
user2366975
schedule
18.04.2020