简单工厂加反射是OCP原则的很好体现。网上已经有很多的例子了,但是这种东西,只有自己想出一个例子,才算是自己的。

       下面的代码中一个五个类。

        TestSimpleFactory是用来测试的驱动。                                                            

        IAnimal是一个接口,声明了一个动物类的行走go的方法。

       Chicken实现了IAnimal接口,表示小鸡,Chicken实现go。只是简单输出Chicken Run。小鸡的走的方式是奔跑。

        Duck也实现了IAnimal接口,表示小鸭,Duck实现go。只是简单输出Duck。小鸭的走的方式是游泳。

        AnimalFactory是一个简单工厂,用来生产小鸡或小鸭。

       TestSimpleFactory.java

public class TestSimpleFactory {      

      public   static   void  main(String[] args) {  
  1.     PropertyReader reader=new PropertyReader("factory.properties");  
  2.     String type=reader.getProperty("factory");  
  3.     IAnimal animal=AnimalFactory.createAnimal(type);  
  4.     animal.go();  
  5.   }  
  6.      
  7. }  

 IAnimal.java

   
   
   
   
  1. public interface IAnimal {  
  2.    void go();  

Chicken.java

   
   
   
   
  1. public class Chicken implements IAnimal{  
  2.  
  3.     public void go() {  
  4.         System.out.println("Chicken Run");  
  5.     }  
  6.    

Duck.java

   
   
   
   
  1. public class Duck implements IAnimal {  
  2.  
  3.     public void go() {  
  4.       System.out.println("Duck Swim");  
  5.     }  
  6.  

AnimalFactory.java 

   
   
   
   
  1. public class AnimalFactory {  
  2.      
  3.     public static IAnimal createAnimal(String name)  
  4.        {  
  5.            try {  
  6.             Class c=Class.forName(name);  
  7.             return (IAnimal)c.newInstance();  
  8.         } catch (ClassNotFoundException e) {  
  9.             System.out.println("This class doesn't exsist!");  
  10.             e.printStackTrace();  
  11.         } catch (InstantiationException e) {  
  12.             System.out.println("This class can't be instantiated!");  
  13.             e.printStackTrace();  
  14.         } catch (IllegalAccessException e) {  
  15.             e.printStackTrace();  
  16.         }  
  17.            return null;  
  18.        }  
  19. }  

其中具体要创建的对象防止factory.properties中。

动物的子类实例化的时候用到了反射。

factory.properties中的内容为:

   
   
   
   
  1. factory=neu.swc.tzy.Car 

属性文件读取方法见:http://snowteng17.blog.51cto.com/1532294/330459