Я думаю, что это решение может подойти.Это надувной вес внутри навесного веса, но в C # он немного упрощен, но я думаю, что вы должны понять эту концепцию.Идея состоит в том, чтобы поставить фасад на место, чтобы получить параметризованные классы.Внутри этого фасада у меня есть словарь, который делает новые фабрики для новых размеров шрифтов.Это может показаться странным, но имейте в виду, что flyweight - это шаблон творческого проектирования, он не будет хранить сам текст, а только даст вам доступ к тем же объектам.И состояние явно не то же самое, поэтому я думаю, что другой завод может быть оправдан.
public class AlphabetFacade
{
private Dictionary<int, AlphabetFactory> _alphabetFactories = new Dictionary<int, AlphabetFactory>();
private Character GetChar(string character, int fontSize)
{
if (_alphabetFactories.ContainsKey(fontSize)) return _alphabetFactories[fontSize].GetCharacter(character);
var factoryNew = new AlphabetFactory(fontSize);
_alphabetFactories.Add(fontSize, factoryNew);
return factoryNew.GetCharacter(character);
}
}
internal class AlphabetFactory
{
private readonly int _fontSize;
private readonly Dictionary<string, Character> _characters = new Dictionary<string, Character>();
public AlphabetFactory(int fontSize)
{
_fontSize = fontSize;
}
public Character GetCharacter(string character)
{
if (_characters.ContainsKey(character)) return _characters[character];
var characterNew = new Character(_fontSize, character);
_characters.Add(character, characterNew);
return characterNew;
}
}
class Character
{
public Character(int size, string @char)
{
Size = size;
Char = @char;
}
public int Size { get; }
public string Char { get; }
}