Не уверен, что вам нужен строитель для этого. Фабрики / Реестры и сериализуемость , вероятно, более важны.
То, как вы делаете слой постоянства неосведомленным о явных типах глифов, в то же время предоставляя ему возможность сохранять и загружать определенные экземпляры глифов, через какой-то механизм отражение .Либо что-то встроенное в язык (например, Reflection в .Net или RTTI в Delphi / C ++ Builder), либо что-то, что вы создаете сами.
Чтобы создать решение самостоятельно, вам нужно, чтобы все типы глифов происходили отобщий «сериализуемый» базовый тип или пусть все они реализуют «сериализованный» интерфейс .Слой постоянства должен знать только об этом базовом типе или интерфейсе - в зависимости от того, что вы выберете.
Использование интерфейса означает, что глифам не всем нужен общий базовый тип, а использование общего базового типа означает, что вы можете реализовать общее поведениев этом базовом типе и избегайте некоторого дублирования.
«Сериализуемый» базовый тип или интерфейс должен обеспечивать постоянный уровень средствами для идентификации типа глифа по уникальному (строковому) идентификатору, средством для перебора свойствбыть сохраненным / загруженным;и средства для создания экземпляра глифа полиморфно (говорят виртуальные конструкторы и мета-классы в Delphi).
Для сохранения экземпляров должно быть достаточно получения идентификатора типа глифа и итерации по сохраняемым свойствам.
Перебор свойств должен быть простым и понятным, но если вы хотите «проектировать шаблон», вы можете использовать Visitor .Что может сделать жизнь намного проще, когда составленные и агрегированные глифы (группировка в приложениях для рисования) попадают в картину, без каламбура :-).В связи с этим вы также можете рассмотреть шаблон Composite , хотя это может быть излишним для того, что вас просили сделать.
Чтобы загрузить глифы из постоянного хранилищавам понадобится реестр где-нибудь, где типы глифов связаны с уникальным именем (строкой), чтобы уровень персистентности мог искать тип для создания экземпляра из строки в сохраняемой информации.Каждый тип глифа должен быть зарегистрирован в реестре, чтобы его можно было найти и создать экземпляр на уровне персистентности.Посмотрите шаблон Factory Method и Abstract Factory для получения дополнительной информации об этом.