public abstract class Guerreiro
{
public string Espada { get; protected set; }
public string Armadura { get; protected set; }
public string Arco { get; protected set; }
public abstract void EscolherEspada(string espada);
public abstract void ColocarArmadura(string armadura);
public abstract void EscolherArco(string arco);
}
public abstract class CriadorDeGuerreiro
{
protected Guerreiro _guerreiro;
public Guerreiro ObterGuerreiro()
{
return _guerreiro;
}
public abstract void ComEspada();
public abstract void ComArmadura();
public abstract void ComArco();
}
public class CriadorDeGuerreiroFuturista : CriadorDeGuerreiro
{
public CriadorDeGuerreiroFuturista()
{
_guerreiro = new GuerreiroFuturista();
}
public override void ComArco()
{
_guerreiro.EscolherArco("Arco futurista");
}
public override void ComArmadura()
{
_guerreiro.ColocarArmadura("Armadura futurista");
}
public override void ComEspada()
{
_guerreiro.EscolherEspada("Espada futurista");
}
}
public class CriadorDeGuerreiroMedieval : CriadorDeGuerreiro
{
public CriadorDeGuerreiroMedieval()
{
_guerreiro = new GuerreiroMedieval();
}
public override void ComArco()
{
_guerreiro.EscolherArco("Arco medieval");
}
public override void ComArmadura()
{
_guerreiro.ColocarArmadura("Armadura medieval");
}
public override void ComEspada()
{
_guerreiro.EscolherEspada("Espada medieval");
}
}
public class GuerreiroFuturista : Guerreiro
{
public override void ColocarArmadura(string armadura)
{
Armadura = armadura;
}
public override void EscolherArco(string arco)
{
Arco = arco;
}
public override void EscolherEspada(string espada)
{
Espada = espada;
}
}
public class GuerreiroMedieval : Guerreiro
{
public override void ColocarArmadura(string armadura)
{
Armadura = armadura;
}
public override void EscolherArco(string arco)
{
Arco = arco;
}
public override void EscolherEspada(string espada)
{
Espada = espada;
}
}
public class Exercito
{
public void ConstruirGuerreiro(CriadorDeGuerreiro criador)
{
criador.ComArco();
criador.ComArmadura();
criador.ComEspada();
}
}
class Program
{
static void Main(string[] args)
{
var exercito = new Exercito();
CriadorDeGuerreiro criadorDeGuerreiro;
Guerreiro guerreiro;
// criando um guerreiro medieval
criadorDeGuerreiro = new CriadorDeGuerreiroMedieval();
exercito.ConstruirGuerreiro(criadorDeGuerreiro);
guerreiro = criadorDeGuerreiro.ObterGuerreiro();
Console.WriteLine("Guerreiro com as características: {0}, {1}, {2}",
guerreiro.Arco, guerreiro.Armadura, guerreiro.Espada);
// criando um guerreiro futurista
criadorDeGuerreiro = new CriadorDeGuerreiroFuturista();
exercito.ConstruirGuerreiro(criadorDeGuerreiro);
guerreiro = criadorDeGuerreiro.ObterGuerreiro();
Console.WriteLine("Guerreiro com as características: {0}, {1}, {2}",
guerreiro.Arco, guerreiro.Armadura, guerreiro.Espada);
}
}