add Flyweight pattern