我在一次采访中有一个问题,问我有两种食物,例如面包和蛋糕,被给予以下信息:

 public class FoodFactory{};

 public class Food{};

 public static void main(String[] args) {
    Food foo = FoodFactory.get("bread");
    System.out.println(foo.getClass().getName());
 }


给定FoodFactory类和Food类,我不确定如何使它起作用,以便它可以为该类打印出"bread"。看起来确实唯一可以打印出面包的方法是创建一个Bread类,并让FoodFactory返回该类。

我只是想知道是否遗漏了什么,因为FoodFactoryFood是给定的类,所以我认为这些是我需要更改的仅有的两个类。有没有一种方法可以在仅使用这两个类的情况下实现给定的两个类并使其打印"bread"

最佳答案

因此,一种实现方法是使类Bread扩展类Food并使FoodFactory.get()根据传递的字符串返回适当的对象。

class Food {};

class Bread extends Food {};

class FoodFactory {
    public static Food get(String type){
        switch(type){
            case "bread" : return new Bread();
            default : return new Food();
        }
    }
}


做到这一点的另一种方法是使用反射。

10-06 10:57