I'm a visitor, i would visit the ones i knew.

I'm learning Design Pattern, Here is what i think about the visitor Pattern. if something wrong, please inform me. thanks


//I'm a visitor, i could visit the ones i knew.
//if i want to visit a new one, i must know him, and he must accept me first.


//the following is Me -- a visitor, and i know He and She, they both accept me.
interface Visitor {
public void visit(He h); // i know him
public void visit(She s); // i know her
}

class He {
public void accept(Visitor me) { // he accepts me
me.visit(this); // so i could visit him
}
}
class She {
public void accept(Visitor me) { // she accepts me 2
me.visit(this); // so i could visit her
}
}


//and now if i want to visit It, i must know It, that is:
interface Visitor {
public void visit(He h); // i know him
public void visit(She s); // i know her

public void visit(It i); // i must know it first
}

class It {
public void accept(Visitor me) { // and it must accept me 2.
me.visit(this); // so i could visit it.
}
}
// at this time, i could visit them separately

//if i want to visit them one by one, i must know all of them, and each of them must accept me. that is:
interface Acceptable {
public void accept(Visitor me);
}
// and each of them is acceptable, so :
class He implements Acceptalbe {
public void accept(Visitor me) { // he accepts me
me.visit(this); // so i could visit him
}
public void running() { }
}
class She implements Acceptalbe {
public void accept(Visitor me) { // she accepts me 2
me.visit(this); // so i could visit her
}
public void crying() { }
}
class It implements Acceptalbe {
public void accept(Visitor me) { // and it also accept me.
me.visit(this); // so i could visit it.
}
public void sleeping() { }
}


//now, i was visiting all the one i knows here:

class Visiting {
public static void main(String []args) {
Visitor me=new Visitor() { // this is the real Me
public void visit(He h) { // and i know all of them
h.runing();
}
public void visit(She s) {
s.crying();
}
public void visit(It i) {
i.sleeping();
}
};
Collection me=new LinkedList(); // now i'm ready to visit them
me.add(new He());
me.add(new She());
me.add(new It());

Iterator iter = me.iterator();
while ( iter.hasNext() ) { // so i will visit them one by one.
Acceptable x=(Acceptable)iter.next();
x.accept(me); // and they all accept me, so i could visit them successful them.
}

}
}

我感觉没问题,good