add Strategy Design Pattern