add flyweight design pattern