Arquivo

Textos com Etiquetas ‘padrões de projetos’

Sabe aquele monte de “if” e “else” no código? Limpando tudo em Java.

26, agosto, 2009 eliezer 3 comentários

Uma das coisas que considero mais ruins de se ler em um código são os malditos ifs encadeados. Veja, não é fácil de se ler, não é confiável e bem mais propício a bug. Portando se tem muitos ifs, algo não está correto.

Vou utilizar polimorfismo para implementar o padrão de projeto Strategy.

Um fiz um caso simples apenas para exemplificar o estudo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class StringUtils {
 
	public static final String	REMOVE_ALL_SPACES	= "remove-all-spaces";
	public static final String	FILTER_ONLY_NUMBERS	= "filter-only-numbers";
 
	public static String format(String action, String value) {
 
		if (REMOVE_ALL_SPACES.equals(action)) {
			return value.replaceAll("\\s", "");
		} else if (FILTER_ONLY_NUMBERS.equals(action)) {
			return value.replaceAll("\\D", "");
		}
		return null;
	}
}

Bom não é tão feio, pq tb quem nunca viu algo pior que isso que atire a primeira pedra. :) Vamos fazer com que esse método format seja mais simples. No caso ele está com apenas duas comparações, mas lembre-se que poderiam ser 18. :(

Mas dá pra melhorar e muito utilizando Enum. Veja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum StringFormat {
 
	TRIM_SPACES() {
 
		@Override
		public String format(String value) {
			return value.replaceAll("\\s", "");
		}
	},
	ONLY_NUMBERS() {
 
		@Override
		public String format(String value) {
			return value.replaceAll("\\D", "");
		}
	};
	public abstract String format(String value);
}

E agora o nosso objetivo final, remover os ifs e else do método format:

1
2
3
4
5
6
public class StringUtils {
 
	public static String format(StringFormat action, String value) {
		return action.format(value);
	}
}

Legal né?