通过接口来实现,并使用工厂设计模式,将对象的创建工做交给类自己去完成。
    列:注册工厂

    1. package com.package14.Two;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. import java.util.Random;
    5. public interface Fatory <T>{//使用泛型可以在每种实现里返回不同的类型
    6. T create();
    7. }
    8. class Part{
    9. @Override
    10. public String toString() {
    11. return getClass().getSimpleName();
    12. }
    13. static List<Fatory<?extends Part>> parts=new ArrayList<>();
    14. static{
    15. parts.add(new FueFilter.Fac());
    16. parts.add(new AirFilter.Fac());
    17. }
    18. private static Random random=new Random(47);
    19. public static Part createClass(){
    20. int i = random.nextInt(parts.size());
    21. return parts.get(i).create();//获得生成的实例
    22. }
    23. }
    24. class Filter extends Part{}
    25. class FueFilter extends Filter{
    26. public static class Fac implements Fatory<FueFilter>{
    27. @Override
    28. public FueFilter create() {
    29. return new FueFilter();
    30. }
    31. }
    32. }
    33. class AirFilter extends Filter{
    34. public static class Fac implements Fatory<AirFilter>{
    35. @Override
    36. public AirFilter create() {
    37. return new AirFilter();//返回一个实例对象
    38. }
    39. }
    40. }
    41. public class RegisterFactoires {
    42. public static void main(String[] args) {
    43. for (int i = 0; i <5 ; i++) {
    44. System.out.println(Part.createClass());
    45. }
    46. }
    47. }