https://ru.wikipedia.org/wiki/Приспособленец_(шаблон_проектирования)
https://en.wikipedia.org/wiki/Flyweight_pattern
используется для уменьшения затрат при работе с большим количеством мелких объектов.
Например, хочется разбить текст на фрагменты, а каждому фрагменту приписать имя автора, который вносил байты этого фрагмента последним (у символа, получается, может быть несколько авторов, т.к. несколько байтов).
Тогда у сегмента получается три набора свойств:
- свойства сегмента, зависящие от местоположения сегмента
- свойства сегмента, зависящие от автора/списка авторов
- свойства сегмента, относящиеся к содержанию сегмента
(сегмент текста может повторяться в разных местах, например если это имя переменной)
Поэтому нужны классы ПозицияСегмента, ГруппаАвторовСегмента (сегмент с приписанными авторскими правами), ФрагментСодержимогоСегмента, парные (потому что шаблон приспособленец требует два интерфейса) к ним классы Позиция, ГруппаАвторов, ФрагментСодержимого, а так же фабрики РеестрСегментов, РеестрГруппАвторов, РеестрФрагментовСодержимого
Зачем это нужно? После критики Уткина об отсутствии уровня строк, я хочу добавить в модель ещё три уровня: файлов, авторства, и отступов.
Итого:
Уровень_Файлов
(цель - выписать имена всех файлов, участвующих в сборке)
Уровень_Байтов
(цель - приписать каждому байту из какого он файла)
Уровень_Авторства
(цель - приписать каждому байту (или биту?), кто его автор)
Уровень_Юникода
(цель - собрать байты в Codepoint-ы)
Уровень_Символов
(цель - Codepoint-ы в символы, они там составные и альтернативные бывают, например переводы строки)
Уровень_Номеров_Исходных_Строк
(цель - разбить текст на строки, приписать номера строк каждому символу)
Уровень_Лексем_Препроцессора
Уровень_Грамматики_Препроцессора
(цель - препроцессором подключить тексты других файлов в общий текст)
Уровень_Номеров_Отпрепроцешшеных_Строк (если такие номера нужны)
(цель - пересчитать номера строк в общем файле, который отправится на компиляцию)
Уровень_Отступов (питон рекомендует 8 пробелов на табуляцию и предпочитать использовать пробелы)
(цель - снабдить каждый символ информацией о его отступе)
Уровень_Лексем_Языка (ДКА)
(цель - собрать символы в части слов)
Уровень_Слов_Языка (КС-грамматики на уровне слов)
(цель - собрать части слов в словоформы)
Уровень_Грамматики_Языка (Смысл-текст)
(цель - связать словоформы в что-нибудь связное)
Страшно представить, сколько это всё займёт в памяти, учитывая, что каждый объект это минимум 32 байта