工厂模式的变种:通过接口的形式来实现
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class Part{
@Override
public String toString() {
return getClass().getSimpleName();
}
static List<Factory<? extends Part>> partFactories = new ArrayList<Factory<? extends Part>>();
static {
//此时partFactories为类型信息
partFactories.add(new FuelFiletr.Fac());
partFactories.add(new AirFilter.Fac());
}
private static Random random = new Random(47);
public static Part createRandom(){
int i = random.nextInt(partFactories.size());
return partFactories.get(i).create();
}
}
class Filter extends Part{}
class FuelFiletr extends Filter{
public static class Fac implements Factory<FuelFiletr>{
@Override
public FuelFiletr create() {
return new FuelFiletr();
}
}
}
class AirFilter extends Filter{
public static class Fac implements Factory<AirFilter>{
@Override
public AirFilter create() {
return new AirFilter();
}
}
}
public class RegisterFactories {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(Part.createRandom());
}
}
}