add Strategy Pattern.