add strategy patter and option parsing