add Strategy Pattern