В книге пишут, что ConcreteFlyweight используется для хранения внутренних состояний, а внешние хранятся в фабрике, а про UnsharedConcreteFlyweight пишут, что используется, когда нельзя разделить состояния на внешние и внутренние, как вот это все относится к вашему примеру?