Visitor in Java

来源:互联网 发布:适合冥想的音乐 知乎 编辑:程序博客网 时间:2024/06/05 18:02

Visitor Code Sample

Visitor design pattern
1. Add an accept(Visitor) method to the “element” hierarchy
2. Create a “visitor” base class w/ a visit() method for every “element” type
3. Create a “visitor” derived class for each “operation” to do on “elements”
4. Client creates “visitor” objects and passes each to accept() calls

interface Element {    void accept(Visitor v);}class FOO implements Element {    public void accept(Visitor v) {        v.visit(this);    }    public String getFOO() {        return "FOO";    }}class BAR implements Element {    public void   accept( Visitor v ) {        v.visit( this );    }    public String getBAR() {        return "BAR";    }}class BAZ implements Element {    public void accept(Visitor v) {        v.visit(this);    }    public String getBAZ() {        return "BAZ";    }}interface Visitor {    void visit(FOO foo);    void visit(BAR bar);    void visit(BAZ baz);}class UpVisitor implements Visitor {    public void visit(FOO foo) {        System.out.println("do Up on " + foo.getFOO());    }    public void visit(BAR bar) {        System.out.println("do Up on " + bar.getBAR());    }    public void visit(BAZ baz) {        System.out.println( "do Up on " + baz.getBAZ() );    }}class DownVisitor implements Visitor {    public void visit(FOO foo) {        System.out.println("do Down on " + foo.getFOO());    }    public void visit(BAR bar) {        System.out.println("do Down on " + bar.getBAR());    }    public void visit(BAZ baz ) {        System.out.println("do Down on " + baz.getBAZ());    }}public class VisitorDemo {    public static void main( String[] args ) {        Element[] list = {new FOO(), new BAR(), new BAZ()};        UpVisitor up = new UpVisitor();        DownVisitor down = new DownVisitor();        for (Element element : list) {            element.accept(up);        }        for (Element element : list) {            element.accept(down);        }    }}

Output

do Up on FOOdo Up on BARdo Up on BAZdo Down on FOOdo Down on BARdo Down on BAZ
原创粉丝点击