工程模式+斐波那契数列
题目
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);
}
}
- 面试官没有见面说这个不对 请问有什么比较好的答题方式嘛
整体上应该是对的,唯一的一个地方,大概是mode的工厂方法应该接收一个product对象,直接装配好可用的mode对象返回,而不是让客户自己去装配。
当然,也可以更进一步,mode接收一个表示具体product的字符串(或者class),完成所有装配工作后返回mode对象。这样客户就完全不用管product了。