java筆試題,給model和producer的建立提供一些額外的自由度,編寫ModelFactory類和ProducerFactory類
// producer.java
import java.util.ArrayList;
public interface Producer{
ArrayList<Integer> produce(int length);
}
// modelbase.java
abstract public classModelBase{
}
// model.java
import java.util.ArrayList;
class Model extends ModelBase{
private Producer producer;
void setProducer(Producer producer){
this.producer = producer;
}
ArrayList<Integer> test(int length){
return this.producer.producer(length);
}
}
1. 編寫FibonacciProducer類,實現斐波那契數列
示例:
Model model = new Model();
model.setProducer(new FibonacciProducer());
System.out.print(model.test(10));
輸出 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
2. 給model和producer的建立提供一些額外的自由度,編寫ModelFactory類和ProducerFactory類
示例:
Model model = ModelFactory.create();
model.setProducer(ProducerFactory.create('fibonacci'));
System.out.print(model.test(10));
輸出 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
這個面試題挺有意思的,所以我想儲存一下,在面試的時候沒想這麼多,回家了以後,慢慢品味,感覺還是挺有意思的。下面開始實現。
1.
class FibonacciProducer implements Producer{
static int a = 0;
static int b = 1;
static int c = 0;
@Override
public ArrayList<Integer> produce(int length) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < length; i++) {
list.add(ret(i));
}
return list;
}
public static int ret(int value){
if( value < 2 ){
a = b;
return 1;
} else {
c = a + b;
a = b;
b = c;
return c;
}
}
}
2.
class ModelFactory{
public static ModelBase create(){
return new Model();
}
}
class ProducerFactory{
public static Producer create(String name){
if(name != null && name.equals("fibonacci")){
return new FibonacciProducer();
}
return null;
}
}