注册工厂

来源:互联网 发布:知微的博客 编辑:程序博客网 时间:2024/05/17 09:33

当我们要随机创建多个不同父类的子类时,我们可以用工厂方法设计模式结合泛型实现。
代码例子:

public interface Factory<T> { T create(); } class Part {      public String toString() {        return getClass().getSimpleName();      }      //储存对象工厂      static List<Factory<? extends Part>> partFactories =        new ArrayList<Factory<? extends Part>>();         static {        partFactories.add(new FuelFilter.Factory());        partFactories.add(new AirFilter.Factory());        partFactories.add(new CabinAirFilter.Factory());        partFactories.add(new OilFilter.Factory());        partFactories.add(new FanBelt.Factory());        partFactories.add(new PowerSteeringBelt.Factory());        partFactories.add(new GeneratorBelt.Factory());      }      private static Random rand = new Random(47);      //随机产生工厂      public static Part createRandom() {        int n = rand.nextInt(partFactories.size());        return partFactories.get(n).create();      }    }       class Filter extends Part {}    class FuelFilter extends Filter {      public static class Factory      implements beyondboy.Factory<FuelFilter> {        public FuelFilter create() { return new FuelFilter(); }      }    }    class AirFilter extends Filter {      public static class Factory      implements beyondboy.Factory<AirFilter> {        public AirFilter create() { return new AirFilter(); }      }    }       class CabinAirFilter extends Filter {      public static class Factory      implements beyondboy.Factory<CabinAirFilter> {        public CabinAirFilter create() {          return new CabinAirFilter();        }      }    }    class OilFilter extends Filter {      public static class Factory      implements beyondboy.Factory<OilFilter> {        public OilFilter create() { return new OilFilter(); }      }    }       class Belt extends Part {}    class FanBelt extends Belt {      public static class Factory      implements beyondboy.Factory<FanBelt> {        public FanBelt create() { return new FanBelt(); }      }    }    class GeneratorBelt extends Belt {      public static class Factory      implements beyondboy.Factory<GeneratorBelt> {        public GeneratorBelt create() {          return new GeneratorBelt();        }      }    }       class PowerSteeringBelt extends Belt {      public static class Factory      implements beyondboy.Factory<PowerSteeringBelt> {        public PowerSteeringBelt create() {          return new PowerSteeringBelt();        }      }    }       public class RegisteredFactories {      public static void main(String[] args) {        for(int i = 0; i < 10; i++)          System.out.println(Part.createRandom());      }    }

运行结果:
GeneratorBelt
CabinAirFilter
GeneratorBelt
AirFilter
PowerSteeringBelt
CabinAirFilter
FuelFilter
PowerSteeringBelt
PowerSteeringBelt
FuelFilter

0 0