先说一下面向对象设计的基本原则:
OCP:开放原则,一个软件的实体应当对扩展开放,对修改关闭。
DIP:依赖倒转原则,针对接口编程,不要针对实现编程。
LoD:迪米特法则,只与直接相关的类通信,避免和陌生人通信。
在平常的编程中,我们都是直接new一个对象,而在工厂模式中,将对象的创建统一进行管理和控制,将调用者与实现类进行解耦。
下边是一个简单的示例代码:
public interface Car {
    void run();
}
public class Andi implements Car {
    @Override
    public void run() {
        System.out.println("andi在跑");
    }
}
public class Byd implements Car{
    @Override
    public void run() {
        System.out.println("byd在跑");
    }
}
public class CarFactory{
    //写法1
    public static Car getCar(String type){
        if("andi".equals(type)){
            return new Andi();
        }else if("byd".equals(type)){
            return new Byd();
        }
        return null;
    }
    
    //写法2
    public static Cat getAndi(){
        return new Andi();
    }
    
    public static Car getByd(){
        return new Byd();
    }
}
以上简单工厂模式的实现,第二种是工厂方法模式的实现:
public interface CarFactory {
    Car createCar();
}
public class AndiFactory implements CarFactory{
    @Override
    public Car createCar() {
        return new Andi();
    }
}
public class BydFactory implements CarFactory{
    @Override
    public Car createCar() {
        return new Byd();
    }
}
如果新增加一个Benc类的话:如下:
public class BencFactory implements CarFactory{
    @Override
    public Car createCar() {
        return new Benc();
    }
}
测试如下:
    public static void main(String[] args) {
        Car c1 = new AndiFactory().createCar();
        Car c2 = new BydFactory().createCar();
        
        c1.run();
        c2.run();
    }
 
 
 