上一次提到了工厂方法模式,经过查阅相关资料,发现可以有改进之处:
改进1.工厂方法
package com.sf.hf;
import com.sf.entity.Apple;
import com.sf.entity.Banana;
import com.sf.jk.Fruit;
public class FruitFactory {
public class FruitFactory {
public static Fruit createFruit(Class c){
//定义一个水果对象
Fruit fruit = null;
try {
fruit = (Fruit) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
System.out.println("创建出错");
}
return fruit;
}
}
}
改进2.客户端调用
import com.sf.entity.Apple;
import com.sf.entity.Banana;
import com.sf.hf.FruitFactory;
import com.sf.jk.Fruit;
public class Test {
public static void main(String[] args) {
System.out.println("---------创建苹果---------");
Fruit apple = FruitFactory.createFruit(Apple.class);
apple.eat();
apple.plant();
System.out.println("---------创建香蕉---------");
Fruit banana = FruitFactory.createFruit(Banana.class);
banana.eat();
banana.plant();
}
}
运行结果:
---------创建苹果---------
生产水果
苹果可以吃
苹果可以种
---------创建香蕉---------
生产香蕉
香蕉可以吃
香蕉可以种
上一次提到的工厂方法是将工厂抽象成一个方法,具体生产产品的方法教给其子类或者实现该接口的子类,
这里用了反射机制省去了具体的工厂实现类,当需要扩展产品的时候,只要传入不同的产品类即可。
客户端调用的时候只需要将产品类传入即可,如 Apple.class
本文探讨了工厂方法模式的一种改进方法,利用Java反射机制,避免了为新产品创建新的工厂实现类。通过传入产品类如Apple.class,客户端可以直接调用,实现更灵活的产品创建。
542

被折叠的 条评论
为什么被折叠?



