码迷,mamicode.com
首页 > 其他好文 > 详细

访问者模式

时间:2020-02-28 22:47:41      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:board   bsp   imp   nts   http   static   class   rri   键盘   

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

类图

技术图片

(图: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);
    }
}

运行结果

技术图片

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

 

访问者模式

标签:board   bsp   imp   nts   http   static   class   rri   键盘   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!