add singleton decorator factroy strategy pattern