Java实现的注册工厂模式


 Java实现的注册工厂模式

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

相关内容