简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通过专门定义一个类来负责创建其它类的实例。被创建的实例通常都具有共同的父类。
代码实例如下:
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它们了。 这个过程我们交给一个工厂类来做。
简单工厂模式的优缺点:
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界指定的信息,决定究竟应该创建哪个类的对象。用户在使用的时候可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以在“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性不是很好。