add Flyweight Pattern