- 定义:
定义一个用于创建对象的接口,让子类决定实例化哪个类。
- 使用场景:
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合工厂模式,用new就可以完成创建的对象无需使用工厂模式
- 简单实现:
奥迪工厂:
public abstract class AudiFactory { /** * 奥迪工厂 * @param clz 具体的奥迪车型号 * @param <T> 奥迪车泛型 * @return 具体型号的奥迪车对象 */ public abstract <T extends AudiCar> T createAudiCar(Class<T> clz); }
奥迪车工厂:
public class AudiCarFactory extends AudiFactory { @Override public <T extends AudiCar> T createAudiCar(Class<T> clz) { AudiCar car = null; try { car = (AudiCar) Class.forName(clz.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) car; } }
奥迪车:
public abstract class AudiCar { /** * 驾驶 */ public abstract void drive(); /** * 自动导航 */ public abstract void selfNavigation(); }
奥迪Q3类:
public class AudiQ3 extends AudiCar { @Override public void drive() { System.out.println("Q3在驾驶"); } @Override public void selfNavigation() { System.out.println("Q3在自动导航"); } }
Client类:
public class Client { public static void main(String[] args) { AudiFactory factory = new AudiCarFactory(); AudiQ3 audiQ3 = factory.createAudiCar(AudiQ3.class); audiQ3.drive(); audiQ3.selfNavigation(); } }
输出:
Q3在驾驶 Q3在自动导航