mardi 5 mai 2015

Is there a way to avoid using method for self invoke inside every element in Visitor Pattern?

interface ICarElementVisitor {
    void visit(Engine engine);
}

interface ICarElement {
    //want to use this
    void accept(ICarElementVisitor visitor); // CarElements have to provide accept().
}

static class Engine implements ICarElement {
    ...
    //want to avoid using this
    public void accept(ICarElementVisitor visitor) {
        visitor.visit(this);
    }
}
...
public void accept(ICarElementVisitor visitor) {
    for (ICarElement elem : elements) {
        elem.accept(visitor);
    }
    visitor.visit(this);
}
    ...
static class CarElementDoVisitor implements ICarElementVisitor {

    public void visit(Engine engine) {
        System.out.println("Starting my engine");
    }

}

Is there a way to avoid using method for self invoke inside every element in Visitor Pattern and use global method of parent class? Or if can i pass parent object and know what instance is that object without instanceof if or switch?

Aucun commentaire:

Enregistrer un commentaire