首页 > 其他 > 详细

访问者模式

时间:2020-02-28 23:30:58      阅读:71      评论:0      收藏:0      [点我收藏+]

把数据结构和数据操作分离

类图

技术分享图片

(图:wiki)

示例

public interface ComputerPart {
    void accept(Visitor computerVisitor);
}

public class KeyBoard implements ComputerPart {
    @Override
    public void accept(Visitor computerVisitor) {
        computerVisitor.visit(this);
    }
}

public class Mouse implements ComputerPart {
    @Override
    public void accept(Visitor computerVisitor) {
        computerVisitor.visit(this);
    }
}

public class Computer implements ComputerPart {
    private KeyBoard keyBoard= new KeyBoard();
    private Mouse mouse = new Mouse();
    @Override
    public void accept(Visitor computerVisitor) {
        computerVisitor.visit(this);
        keyBoard.accept(computerVisitor);
        mouse.accept(computerVisitor);
    }
}

public interface Visitor {
    void visit(Computer computer);
    void visit(Mouse mouse);
    void visit(KeyBoard keyBoard);
}

public class ConcreteVisitor implements Visitor {
    @Override
    public void visit(Computer computer) {
        System.out.println("访问电脑:"+computer);
    }

    @Override
    public void visit(Mouse mouse) {
        System.out.println("访问鼠标:"+mouse);
    }

    @Override
    public void visit(KeyBoard keyBoard) {
        System.out.println("访问键盘:"+keyBoard);
    }
}

//测试
public class Client {
    public static void main(String[] args){
        Computer computer = new Computer();
        Visitor visitor = new ConcreteVisitor();
        computer.accept(visitor);
    }
}

运行结果

技术分享图片

  • 可以在访问时对组合结构加入新操作,而无需修改结构本身。
  • 会打破组合类的封装
  • 组合结构本身的改变会变得困难

 

访问者模式

原文:https://www.cnblogs.com/camcay/p/12380576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!