工厂方法模式(Factory method pattern)
目的
为了避免简单工厂模式不完全满足OCP的缺点
区别
简单工厂模式只有一个工厂类,而工厂方法模式有一组实现了相同接口的工厂类
缺点
工厂方法模式会由于对象实例的增多,导致类的个数增多,结构复杂,代码复杂。在实际应用中,更多的使用简单工厂模式
案例(汽车生产线)
创建汽车接口
public interface Car {
public abstract void run();
}
创建奥迪实例
public class Audi implements Car{
public void run() {
System.out.println("奥迪车在生产中!");
}
}
创建宝马实例
public class Bwm implements Car{
public void run() {
System.out.println("宝马车在生产中!");
}
}
上面所创建的类和简单工厂模式相同,下面进行改进
创建汽车工厂接口
public interface CarFactory {
public abstract Car createCar();
}
创建奥迪自己的工厂
public class AudiFactory implements CarFactory{
public Audi createCar() {
return new Audi();
}
}
创建宝马自己的工厂
public class BwmFactory implements CarFactory{
public Car createCar() {
return new Bwm();
}
}
工厂方法模式(当有新的汽车实例需要添加时,用户不用修改原有的类,只需要做添加即可)
public class CarUser {
public static void main(String[] args) {
Car c1 = new AudiFactory().createCar();
Car c2 = new BwmFactory().createCar();
c1.run();
c2.run();
}
}
UML图(可以看出比简单工厂模式复杂的多)