访问者模式代码举例(java语言版)

前言:服访问者模式解决稳定的数据结构和易变的操作耦合问题。比如下面例子:鼠标,显示器,键盘,电脑它们的关系就是稳定的,所以鼠标,显示器,键盘,电脑实体类组成的结构就是稳定的数据结构。访问方式是多变的,所以可以在访问的时候根据具体需求去访问。

JAVA语言版访问者模式

创建电脑接口:

public interface ComputerPart {
    void accept(ComputerPartVisitor computerPartVisitor);
}

创建访问者接口:

public interface ComputerPartVisitor {
    void visitor(Computer computer);
    void visitor(Mouse mouse);
    void visitor(Keyboard keyboard);
    void visitor(Monitor monitor);
}

创建实现电脑接口的实现类:

public class Mouse implements ComputerPart{
    @Override
    public void accept(ComputerPartVisitor computerPartVisitor) {
        computerPartVisitor.visitor(this);
    }
}

public class Monitor implements ComputerPart{
    @Override
    public void accept(ComputerPartVisitor computerPartVisitor) {
        computerPartVisitor.visitor(this);
    }
}

public class Computer implements ComputerPart{
    ComputerPart computerParts[];

    public Computer() {
        computerParts = new ComputerPart[]{new Keyboard(), new Monitor(), new Mouse()};
    }

    @Override
    public void accept(ComputerPartVisitor computerPartVisitor) {
        for (ComputerPart computerPart:computerParts){
            computerPart.accept(computerPartVisitor);
        }
        computerPartVisitor.visitor(this);
    }
}

创建访问者实现类

public class ComputerPartDisplayVisitor implements ComputerPartVisitor{
    @Override
    public void visitor(Computer computer) {
        System.out.println("显示电脑");
    }

    @Override
    public void visitor(Mouse mouse) {
        System.out.println("显示鼠标");
    }

    @Override
    public void visitor(Keyboard keyboard) {
        System.out.println("显示键盘");
    }

    @Override
    public void visitor(Monitor monitor) {
        System.out.println("显示显示器");
    }
}

使用 ComputerPartDisplayVisitor 来显示 Computer 的组成部分。

public class VisitorPatterDemo {
    public static void main(String[] args) {
        Computer computer =new Computer();
        ComputerPartVisitor computerPartVisitor = new ComputerPartDisplayVisitor();
        System.out.println("访问电脑:");
        computer.accept(computerPartVisitor);
        System.out.println("");
        System.out.println("访问键盘:");
        Keyboard keyboard =new Keyboard();
        keyboard.accept(computerPartVisitor);
    }
}

输出结果:

访问电脑:
显示键盘
显示显示器
显示鼠标
显示电脑

访问键盘:
显示键盘

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值