工厂模式的变种:通过接口的形式来实现

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. import java.util.Random;
    4. class Part{
    5. @Override
    6. public String toString() {
    7. return getClass().getSimpleName();
    8. }
    9. static List<Factory<? extends Part>> partFactories = new ArrayList<Factory<? extends Part>>();
    10. static {
    11. //此时partFactories为类型信息
    12. partFactories.add(new FuelFiletr.Fac());
    13. partFactories.add(new AirFilter.Fac());
    14. }
    15. private static Random random = new Random(47);
    16. public static Part createRandom(){
    17. int i = random.nextInt(partFactories.size());
    18. return partFactories.get(i).create();
    19. }
    20. }
    21. class Filter extends Part{}
    22. class FuelFiletr extends Filter{
    23. public static class Fac implements Factory<FuelFiletr>{
    24. @Override
    25. public FuelFiletr create() {
    26. return new FuelFiletr();
    27. }
    28. }
    29. }
    30. class AirFilter extends Filter{
    31. public static class Fac implements Factory<AirFilter>{
    32. @Override
    33. public AirFilter create() {
    34. return new AirFilter();
    35. }
    36. }
    37. }
    38. public class RegisterFactories {
    39. public static void main(String[] args) {
    40. for (int i = 0; i < 5; i++) {
    41. System.out.println(Part.createRandom());
    42. }
    43. }
    44. }