Dúvida na aplicação do design patterns strategy

Olá amigos,

Quero solicitar uma ajuda para aplicar o design patterns em uma aplicação legado que tenho aqui, fiz o exemplo abaixo para ilustrar.

public void sendMessage(Account account) throws Exception {

		String mensagem = null;
		
		System.out.println(account.getName());
		System.out.println(account.getEmail());
		
		if (account.getCountry().equalsIgnoreCase("BR")) {
			mensagem = "Seja bem vindo ao nosso portal";
		} else if  (account.getCountry().equalsIgnoreCase("MX")) {
			mensagem = ("Bienvenido a nuestro portal");	
		} else if  (account.getCountry().equalsIgnoreCase("EN")) {
			mensagem = ("Welcome to our portal");	
		}	

	}

Na aplicação eu recebe um objeto (account) e um atributo especifico ele testa para identificar a localidade e direcionar a mensagem correspondente.
A lista de localidades pode crescer ainda mais, por isso entendo que aqui caberia o design patter strategy.

A principio tentei aplicar um Enum com método abstrato conforme o exemplo abaixo:

package com.example.desingPatterns.enums;

public enum CountryTemplate {
	BR) {
		@Override
		public String selectTemplate() {
			return "valor template Portugues";
		}
	},
	MX {
		@Override
		public String selectTemplate() {
			return "valor template Espanhol";
		}
	},
	EN {
		@Override
		public String selectTemplate() {
			return "valor template English";		}
	};
	

	public abstract String selectTemplate();
}

E fazendo a chamada dessa forma

//String t = selecionaMensagem (account.getCountry());

Mas depois vi que não atenderia completamente pois para um mesmo valor de retorno eu teria diversas constantes, por exemplo para países de idioma espanhol
Argentina, Paraguai, Colombia etc. teria constantes que retornaria mesmo valor e talvez só estivesse trocando o problema de lugar.

Agradeço antecipadamente algum amigo que puder direcionar uma solução que melhore essa parte do meu código.

Obrigado.

Talvez vc consiga usar um switch para fazer isso msm. Para casos onde o mesmo template seja aplicado para mais de um país, o switch irá atender bem:

Exemplo com java 17:

public class Main {

	public static void main(String[] args) {
		String template = getTemplate(Country.BR);
		System.out.println(template);
	}
	
	private static String getTemplate(Country country) {
		switch (country) {
			case BR -> {
				return "valor template Portugues";
			}
			
			case MX, ARG -> {
				return "valor template Espanhol";
			}
			
			case EN -> {
				return "valor template English";
			}
		}
		
		throw new IllegalArgumentException("Template não existe para o país " + country);
	}
	
	enum Country {
		BR, ARG, MX, EN
	}
}

Caso a criação do template for um código mais elaborado, ai recomendo usar interface e jogar cada implementação numa classe separada.

Isso é um problema de internacionalização/localização, então pare o que está fazendo e leia este tutorial (e faça como está indicado lá).

Valeu Lucas, usei parte dessa ideia implementando o conceito de internacionalização. Obrigado.

1 curtida