add Strategy pattern