<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    人在江湖

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    參考:http://en.wikipedia.org/wiki/Visitor_pattern

    class=thumbimage

    Example
    The following example is in the Java programming language, and shows how the contents of a tree of nodes (in this case describing the components of a car) can be printed. Instead of creating "print" methods for each subclass (Wheel, Engine, Body, and Car), a single class (CarElementPrintVisitor) performs the required printing action. Because different subclasses require slightly different actions to print properly, CarElementDoVisitor dispatches actions based on the class of the argument passed to it.

    alt=A Diagram of the Java Code Example.        I, the copyright holder of this work, hereby release it into the public domain.  This applies worldwide. In case this is not legally possible, I grant any entity the right to use this work for any purpose, without any conditions, unless such conditions are required by law.

    interface CarElementVisitor {
        void visit(Wheel wheel);
        void visit(Engine engine);
        void visit(Body body);
        void visit(Car car);
    }
    interface CarElement {
        void accept(CarElementVisitor visitor); // CarElements have to provide accept().
    }
    class Wheel implements CarElement {
        private String name;
        public Wheel(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public void accept(CarElementVisitor visitor) {
            visitor.visit(this);
        }
    }
    class Engine implements CarElement {
        public void accept(CarElementVisitor visitor) {
            visitor.visit(this);
        }
    }
    class Body implements CarElement {
        public void accept(CarElementVisitor visitor) {
            visitor.visit(this);
        }
    }
    class Car implements CarElement{
        CarElement[] elements;
        public CarElement[] getElements() {
            return elements.clone(); // Return a copy of the array of references.
        }
        public Car() {
            this.elements = new CarElement[]
              { new Wheel("front left"), new Wheel("front right"),
                new Wheel("back left") , new Wheel("back right"),
                new Body(), new Engine() };
        }
        public void accept(CarElementVisitor visitor) {
            for(CarElement element : this.getElements()) {
                element.accept(visitor);
            }
            visitor.visit(this);
        }
    }
    class CarElementPrintVisitor implements CarElementVisitor {
        public void visit(Wheel wheel) {    
            System.out.println("Visiting "+ wheel.getName()
                                + " wheel");
        }
        public void visit(Engine engine) {
            System.out.println("Visiting engine");
        }
        public void visit(Body body) {
            System.out.println("Visiting body");
        }
        public void visit(Car car) {    
            System.out.println("Visiting car");
        }
    }
    class CarElementDoVisitor implements CarElementVisitor {
        public void visit(Wheel wheel) {
            System.out.println("Kicking my "+ wheel.getName() + " wheel");
        }
        public void visit(Engine engine) {
            System.out.println("Starting my engine");
        }
        public void visit(Body body) {
            System.out.println("Moving my body");
        }
        public void visit(Car car) {
            System.out.println("Starting my car");
        }
    }
    public class VisitorDemo {
        static public void main(String[] args){
            Car car = new Car();
            car.accept(new CarElementPrintVisitor());
            car.accept(new CarElementDoVisitor());
        }

    posted on 2011-02-13 14:19 人在江湖 閱讀(878) 評論(0)  編輯  收藏 所屬分類: design pattern
    主站蜘蛛池模板: 亚洲制服丝袜一区二区三区| 亚洲AV无码AV日韩AV网站| 无码日韩人妻av一区免费| 亚洲日本一线产区和二线| 亚洲国产精品碰碰| 无码人妻一区二区三区免费看| 亚洲最大的黄色网| AV在线亚洲男人的天堂| 69式互添免费视频| www.xxxx.com日本免费| 亚洲啪啪免费视频| 久久久久亚洲AV成人网人人网站| 曰批全过程免费视频网址 | 又硬又粗又长又爽免费看 | 亚洲乱码日产一区三区| 69式互添免费视频| 国产久爱免费精品视频| 亚洲一区二区三区免费在线观看| 亚洲成人高清在线| 久久精品女人天堂AV免费观看| 2022国内精品免费福利视频| 国产精品亚洲片夜色在线| 国产亚洲免费的视频看| 国产青草视频免费观看97| 99在线观看精品免费99| 日韩大片免费观看视频播放| 亚洲国产av美女网站| 国产亚洲免费的视频看| 亚洲国产成人乱码精品女人久久久不卡| 最近中文字幕免费2019| 好湿好大好紧好爽免费视频| 亚洲av综合av一区二区三区| 亚洲精品韩国美女在线| 国产亚洲精品无码成人| 亚洲&#228;v永久无码精品天堂久久 | 亚洲国产精品人人做人人爱| 成年男女男精品免费视频网站 | 人人狠狠综合久久亚洲婷婷| 亚洲熟女一区二区三区| 免费无码黄网站在线观看| 免费能直接在线观看黄的视频 |