用两种不同的返回类型在Java中实现访客模式

时间:2019-08-02 20:40:12

标签: java visitor-pattern

我正在尝试用具有不同返回类型(int和void)的方法的对象结构在Java中实现访问者模式(回家练习,对不起)。

concreteVisitor(即 CostAss )返回 int ,第二个ConcreteVisitor(即 drawCosts )返回 void (即打印费用)。

enter image description here

我有一个问题要了解如何实现此问题。我不允许在Employee接口中创建两个accept方法(一个int一个void)

enter image description here

2 个答案:

答案 0 :(得分:5)

从Java的角度来看,这些方法是相同的,因为返回类型不是方法签名的一部分。

该图不适用于Java。但是,可以使用泛型来解决它。

> from google.colab import files
> 
> !ls
> 
> !rm data.csv

我不是这个想法的大力支持者,我只是想分享 的实现方式。

答案 1 :(得分:0)

您可以创建一个void类型return的方法accept,并且两个具体的访问者都有一个状态,例如

public interface IVisitor {

    void visit(Employee employee);

    int getStatus();
}

public class VisitPrint implement IVisitor{

    public void visit(Employee employee){
      //todo
    }    

    public int getStatus(){
        throw new IllegalArgumentException("Not supported operation");
    }
}

public class VisitSum implement IVisitor{

    int status;

    public void visit(Employee employee){
      //todo
    }

    public int getStatus(){
        return status;
    }
}

public interface Employee {
  void accept(Visitor visitor);
}

此解决方案可以解决问题并尊重老师的心态。