工厂模式的变种:通过接口的形式来实现
import java.util.ArrayList;import java.util.List;import java.util.Random;class Part{@Overridepublic 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>{@Overridepublic FuelFiletr create() {return new FuelFiletr();}}}class AirFilter extends Filter{public static class Fac implements Factory<AirFilter>{@Overridepublic 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());}}}
