工程模式+斐波那契数列

工程模式+斐波那契数列

题目

public class Mode {
    private Product product;

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

    public List<Integer> calc(int length) {
        return product.fibo(length);
    }

    public static void main(String[] args) {
        Product product = new Fibonacci();
        Mode mode = new Mode();
        mode.setProduct(product);
        List<Integer> calc = mode.calc(10);
        System.out.println(calc);
    }
}
public interface Product {
    List<Integer> fibo(int length);
}
  • 实现一个斐波那契数列输出[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 在原有代码上补充
  • 实现一个ModeFactory , ProductFactory

答题

public class Fibonacci implements Product {

    public List<Integer> fibo(int length) {
        List<Integer> res = new ArrayList<Integer>();
        for (int i = 0; i < length; i++) {
            res.add(calcFibo(i));
        }
        return res;
    }

    private Integer calcFibo(int i) {
        if (i == 0 || i == 1) {
            return 1;
        } else {
            return calcFibo(i - 1) + calcFibo(i - 2);
        }
    }

}
  • 两个工厂模式
public class ModeFactory {
  public static   Mode crate() {
        return new Mode();
    }
}

public class ProductFactory {
    public static Product create(String name) {
        if ("斐波那契".equals(name)) {
            return new Fibonacci();
        } else {
            throw new RuntimeException("没有方法");
        }
    }
}
public class Run {
    public static void main(String[] args) {
        Mode crate = ModeFactory.crate();
        crate.setProduct(ProductFactory.create("斐波那契"));
        List<Integer> calc = crate.calc(10);
        System.out.println(calc);
    }
}
  • 面试官没有见面说这个不对 请问有什么比较好的答题方式嘛
阅读 1.5k
1 个回答

整体上应该是对的,唯一的一个地方,大概是mode的工厂方法应该接收一个product对象,直接装配好可用的mode对象返回,而不是让客户自己去装配。

当然,也可以更进一步,mode接收一个表示具体product的字符串(或者class),完成所有装配工作后返回mode对象。这样客户就完全不用管product了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题