转自:http://blog.163.com/java_boy@126/blog/static/117663675200911922510417/
静态工厂,是一个工厂类,并且改类没有实现一个工厂接口或者抽象类。
中间采用了反射机制。
如下代码,是一个简单的静态工厂模式:
public class TestFactory {
public static void main(String[] args) {
//根据传入的参数来得道一个对象
Car c = CarFactory.getCarInstance("Benz");
if(c != null) {
c.run();
c.stop();
}
c = CarFactory.getCarInstance("Toyota");
if(c != null) {
c.run();
c.stop();
}
}
}
/*
* 工厂类,用户穿件不同的实现了Car借口的对象实例
*/
class CarFactory{
//把构造函数设为了private,不让产生静态工厂的实例
private CarFactory(){}
/**
* 静态的方法,负责创建对象实例,中间采用的是反射机制
* 返回一个显示了Car接口的对象
* 其中的参数name为要new的对象名称,new对象采用的是反射机制
*/
public static Car getCarInstance(String name) {
Car c = null;
if(name != null && !"".equals(name.trim())) {
try {
Class<?> car = Class.forName(name);
c = (Car) car.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return c;
}
}
interface Car{
public void run();
public void stop();
}
class Benz implements Car{
public void run() {
System.out.println("Benz go .");
}
public void stop() {
System.out.println("Benz stop..");
}
}
class Ford implements Car{
public void run() {
System.out.println("Ford go .");
}
public void stop() {
System.out.println("Ford stop..");
}
}
class Toyota implements Car{
public void run() {
System.out.println("Toyota go .");
}
public void stop() {
System.out.println("Toyota stop..");
}
}