strategy design pattern complete