核心本质:
实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种模式:
用来生产同一等级结构中的任意产品(对于增加的新产品,需要求盖已有的代码)

package factory.simple; public interface Car { void name(); }
package factory.simple; //静态工厂模式 //增加一个新的产品,不修改代码的情况下做不到 //开闭原则 对修改时关闭的 public class CarFactory { //方法一 public static Car getCar(String Car) { if (Car.equals("五菱")) { return new Wuling(); } else if (Car.equals("特斯拉")) { return new Tesla(); }else { return null; } } //方法二 public static Car getWuling(){ return new Wuling(); } public static Car getTesla(){ return new Wuling(); } }
package factory.simple; public class Tesla implements Car { @Override public void name() { System.out.println("伪神特斯拉!"); } }
package factory.simple; public class Wuling implements Car { @Override public void name() { System.out.println("五菱神车"); } }
package factory.simple; public class Consumer { public static void main(String[] args) { //1, 口 所有的实现类! // Car car = new Wuling(); // Car car2 = new Tesla(); // 2,使用工厂创建 Car car = CarFactory.getCar("五菱"); Car car2 = CarFactory.getCar("特斯拉"); car.name(); car2.name(); } }
用来生产同一等级结构中的固定产品(支持增加任意产品)

围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
package factory.method; public interface Car { void name(); }
package factory.method; //工厂方法模式 public interface CarFactory { Car getCar(); }
package factory.method;
public class Tesla implements Car {
@Override
public void name() {
System.out.println("伪神特斯拉!");
}
}
package factory.method;
public class WulingFactory implements CarFactory {
@Override
public Car getCar() {
return new Wuling();
}
}
package factory.method;
import factory.simple.CarFactory;
public class Consumer {
public static void main(String[] args) {
Car car = new WulingFactory().getCar();
Car car1 = new TeslaFactory().getCar();
Car car2 = new MoBaiFactory().getCar();
car.name();
car1.name();
car2.name();
}
//结构复杂度: simple
//代码复杂度: simple
//编程复杂度; simple
//管理复杂度; simple
//根据设计原则: 工厂方法模式!
//根据实际业务: 简单工厂模式!
}
原文:https://www.cnblogs.com/yppaopao/p/13162015.html