概念
- 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类;
- 工厂模式使其创建过程延迟到子类进行;
demo
package com.cn.go.designpattern;
public class FactoryMethod {
public static void main(String[] args) {
MotorVehicleFactory motorVehicleFactory = new MotorVehicleFactory();
Vehicle vehicle = motorVehicleFactory.create(Car.class);
vehicle.move();
NonMotorVehicleFactory nonMotorVehicleFactory = new NonMotorVehicleFactory();
Vehicle bicycle = nonMotorVehicleFactory.create(Bicycle.class);
bicycle.move();
}
}
abstract class Vehicle{
abstract void move();
}
class Car extends Vehicle{
void move() {
System.out.println("car move");
}
}
class Bicycle extends Vehicle{
void move() {
System.out.println("bicycle move");
}
}
/**
* 这个类看似多余;没有这个类,直接创建对象的话就是 简单工厂
*/
abstract class VehicleFactory {
abstract <T extends Vehicle> Vehicle create(Class<T> c);
}
class MotorVehicleFactory extends VehicleFactory{
<T extends Vehicle> Vehicle create(Class<T> c) {
T res =null ;
try {
res = (T) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return res;
}
}
class NonMotorVehicleFactory extends VehicleFactory{
<T extends Vehicle> Vehicle create(Class<T> c) {
Vehicle vehicle = null;
try {
vehicle = c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return vehicle;
}
}