generalize Strategy class.