简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通过专门定义一个类来负责创建其它类的实例。被创建的实例通常都具有共同的父类。
代码实例如下:
package factory; /** * 水果共有的父类接口 * @author Sweiit * */ public interface Fruits { public void get(); } package factory; /** * apple类 * @author Sweiit * */ public class Apple implements Fruits{ @Override public void get() { System.out.println("Apple !"); } } package factory; /** * banana类 * @author Sweiit * */ public class Banana implements Fruits{ @Override public void get() { System.out.println("Banana !"); } } package factory; /** * 水果工厂类 * @author Sweiit * */ public class FruitsFactory { public static Fruits getFruit(String fruitname) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ Class fruit = Class.forName(fruitname); return (Fruits)fruit.newInstance(); } } package factory; /** * 测试类 * @author Sweiit * */ public class Test { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Fruits banana = FruitsFactory.getFruit("factory.Banana"); banana.get(); } } 测试结果如下:
这里我使用了这四个类来模拟简单工厂模式,这样我们得到Apple和Banana的实例就不用通过 new它们了。 这个过程我们交给一个工厂类来做。
简单工厂模式的优缺点:
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界指定的信息,决定究竟应该创建哪个类的对象。用户在使用的时候可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以在“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性不是很好。
