Witam,
próbuję zaimplementować łańcuch zobowiązań. Niestety nie działa on prawidłowo. Problem polega na tym, że w poniższym przykładzie dla
handler2.getAnimal()
na wyjściu otrzymuję wartość null. Z góry dziękuję za każdą pomoc.
public class Main {
static Handler getChain(){
DogHandler dog = new DogHandler();
CatHandler cat = new CatHandler();
dog.setSuccesor(cat);
return dog;
}
public static void main(String[] args) {
Handler handler = getChain();
handler.loadAnimal("dog");
System.out.println(handler.getAnimal());// output "dog"
Handler handler2 = getChain();
handler2.loadAnimal("cat");
System.out.println(handler2.getAnimal());//output null
}
}
public interface Chainable {
void setSuccesor(Handler succesor);
Handler getSuccesor();
}
abstract class Handler implements Chainable{
private Handler succesor;
private String animal;
@Override
public void setSuccesor(Handler succesor) {
this.succesor = succesor;
}
@Override
public Handler getSuccesor() {
return this.succesor;
}
protected void forward(String request){
if(this.succesor != null){
this.getSuccesor().loadAnimal(request);
}
}
abstract void loadAnimal(String request);
public String getAnimal() {
return animal;
}
public void setAnimal(String animal) {
this.animal = animal;
}
}
public class DogHandler extends Handler {
@Override
void loadAnimal(String request) {
if(request.equals("dog")){
setAnimal("dog");
}else{
forward(request);
}
}
}
public class CatHandler extends Handler {
@Override
void loadAnimal(String request) {
if(request.equals("cat")){
setAnimal("cat");
}else{
forward(request);
}
}
}