工厂方法:
将各种产品使用不同的工厂来生产,各种工厂中的创建方法可以互相独立地改变,并将这些工厂类抽象出一个共同的父类。
code:
抽象类(或接口):
public abrtract class Auto{
abstract public void run();
}
实现类Car:
public class Car extends Auto{
public Car(){}
public void run(){
System.out.println("启动car");
}
}
实现类Truck:
public class Truck extends Auto{
public Truck(){}
public void run(){
System.out.println("启动truck");
}
}
工厂类的公共抽象类(或接口):
public abstract class Factory{
abstract public Auto createAuto();
}
具体工厂类carFactory:
public class CarFactory extends Factory{
pubic Auto createAuto(){
return new Car();
}
}
具体工厂类truckFactory:
public class CarFactory extends Factory{
pubic Auto createAuto(){
return new Truck();
}
}
客户端调用:
public class Client{
Factory factory;
Auto auto;
public static void main(){
factory=new CarFactory();
auto=factory.createAuto();
auto.run();
factory=new TruckFactory();
auto=factory.createAuto();
auto.run();
}
}
工厂方法能实现而简单工厂不能实现的情景:
对每一种生产出的产品实例做不同的操作;
增加一种完全不同的产品;
在不修改原有工厂类的情况下增加对新产品的支持;