Skip to content

Instantly share code, notes, and snippets.

@gabfssilva
Created March 13, 2015 22:43
Show Gist options
  • Save gabfssilva/a6eb64351f216b270f1c to your computer and use it in GitHub Desktop.
Save gabfssilva/a6eb64351f216b270f1c to your computer and use it in GitHub Desktop.
interface Command<T>{
void execute(T context);
}
class Chain<T>{
private List<Command<T>> commands;
public Chain(List<Command<T>> commands){
this.commands = commands;
}
public void start(T context){
//loga o que quiser aqui, falando que a chain vai iniciar + o context do parâmetro
for(Command<T> command : commands){
command.execute(context);
//loga o que quiser aqui, falando qual command foi executado + o context do parâmetro
}
//loga o que quiser aqui, falando que a chain acabou + o context do parâmetro
}
}
Ex:
class CompraContext{
//todos os atributos para realizar uma compra
}
class PagaCompraCommand implements Command<CompraContext>{
void execute(CompraContext context){
//a partir do context vc paga a compra e seta outros valores no context que são importantes para outros commands.
}
}
class SalvaCompraCommand implements Command<CompraContext>{
void execute(CompraContext context){
//a partir do context vc salva a compra e seta outros valores no context que são importantes para outros commands.
}
}
Chain<CompraContext> chain = new Chain<CompraContext>(Arrays.asList(new PagaCompraCommand(), new SalvaCompraCommand())); //vai executar na ordem que vc passar
CompraContext context = //inicialize o objeto da maneira que preferir, setando o que a chain precisar
chain.start(context);
//aqui o seu context vai ter o que os commands setaram nela
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment