歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java實現的注冊工廠模式

Java實現的注冊工廠模式

日期:2017/3/1 10:31:14   编辑:Linux編程

Java實現的注冊工廠模式

  1. package com.eric.reflect;
  2. import java.util.ArrayList;
  3. import java.util.Random;
  4. /*
  5. * factory interface
  6. * */
  7. interface Factory<T> {
  8. public T create();
  9. }
  10. public class RegisterFactory {
  11. public static void main(String[] args) {
  12. System.out.println(Part.randomPart());
  13. }
  14. }
  15. class Part {
  16. private static ArrayList<Factory<? extends Part>> factoryList = new ArrayList<Factory<? extends Part>>();
  17. /*
  18. * registry all factory in factoryList when initialize class
  19. * */
  20. static {
  21. factoryList.add(new AirFilter().new AirFilterFactory());
  22. factoryList.add(new CabinFilter().new CabinFilterFactory());
  23. factoryList.add(new CabinBelt().new CabinBeltFactory());
  24. factoryList.add(new AirBelt().new AirBeltFactory());
  25. }
  26. public static Part randomPart() {
  27. return factoryList.get(new Random().nextInt(factoryList.size()))
  28. .create();
  29. }
  30. @Override
  31. public String toString() {
  32. return getClass().getSimpleName();
  33. }
  34. }
  35. class Filter extends Part {
  36. }
  37. class Belt extends Part {
  38. }
  39. class AirBelt extends Belt {
  40. class AirBeltFactory implements Factory<AirBelt> {
  41. public AirBelt create() {
  42. return new AirBelt();
  43. }
  44. }
  45. }
  46. class CabinBelt extends Belt {
  47. class CabinBeltFactory implements Factory<CabinBelt> {
  48. public CabinBelt create() {
  49. return new CabinBelt();
  50. }
  51. }
  52. }
  53. class AirFilter extends Filter {
  54. class AirFilterFactory implements Factory<AirFilter> {
  55. public AirFilter create() {
  56. return new AirFilter();
  57. }
  58. }
  59. }
  60. class CabinFilter extends Filter {
  61. class CabinFilterFactory implements Factory<CabinFilter> {
  62. public CabinFilter create() {
  63. return new CabinFilter();
  64. }
  65. }
  66. }
  67. /*
  68. *
  69. * History:
  70. *
  71. *
  72. *
  73. * $Log: $
  74. */

Copyright © Linux教程網 All Rights Reserved