java中的设计模式(二)--工厂方法模式 反射机制

来源:互联网 发布:资海网络集团招聘骗局 编辑:程序博客网 时间:2024/06/05 19:34

上一次提到了工厂方法模式,经过查阅相关资料,发现可以有改进之处:

改进1.工厂方法

[html] view plaincopy
  1. package com.sf.hf;  
  2.   
  3. import com.sf.entity.Apple;  
  4. import com.sf.entity.Banana;  
  5. import com.sf.jk.Fruit;  
  6.   
  7. public class FruitFactory {  
  8.     public class FruitFactory {  
  9.         public static Fruit createFruit(Class c){  
  10.         //定义一个水果对象  
  11.         Fruit fruit = null;  
  12.         try {  
  13.             fruit = (Fruit) Class.forName(c.getName()).newInstance();  
  14.         } catch (Exception e) {  
  15.             System.out.println("创建出错");  
  16.         }  
  17.         return fruit;     
  18.     }  
  19. }  
  20.       
  21.       
  22. }  


改进2.客户端调用

[html] view plaincopy
  1. import com.sf.entity.Apple;  
  2. import com.sf.entity.Banana;  
  3. import com.sf.hf.FruitFactory;  
  4. import com.sf.jk.Fruit;  
  5.   
  6.   
  7. public class Test {  
  8.   
  9.     public static void main(String[] args) {  
  10.         System.out.println("---------创建苹果---------");  
  11.         Fruit apple = FruitFactory.createFruit(Apple.class);  
  12.         apple.eat();  
  13.         apple.plant();  
  14.         System.out.println("---------创建香蕉---------");  
  15.         Fruit banana = FruitFactory.createFruit(Banana.class);  
  16.         banana.eat();  
  17.         banana.plant();  
  18.     }  
  19. }  


运行结果:

[html] view plaincopy
  1. ---------创建苹果---------  
  2. 生产水果  
  3. 苹果可以吃  
  4. 苹果可以种  
  5. ---------创建香蕉---------  
  6. 生产香蕉  
  7. 香蕉可以吃  
  8. 香蕉可以种  


上一次提到的工厂方法是将工厂抽象成一个方法,具体生产产品的方法教给其子类或者实现该接口的子类,

这里用了反射机制省去了具体的工厂实现类,当需要扩展产品的时候,只要传入不同的产品类即可。

客户端调用的时候只需要将产品类传入即可,如 Apple.class

原创粉丝点击