设计模式 - 工厂方法模式

57 阅读1分钟

简单工厂模式:单个工厂,需要修改工厂内的代码 工厂方法模式:多个工厂,无需修改工厂内的代码,只需要横向扩展工厂类

image.png

代码文件如下图

image.png

前提

public interface Car {
    void name();
}
public class Ferrari implements Car {

    @Override
    public void name() {
        System.err.println("法拉利");
    }
}
public class Porsche implements Car {
    @Override
    public void name() {
        System.err.println("保时捷");
    }
}

工厂方法模式的写法,把车工厂从实现类class变成接口interface

/**
 * 工厂方法模式
 */
public interface CarFactory {
    Car getCar();
}

实现每个车的实现类

public class FerrariFactory implements CarFactory {

    @Override
    public Car getCar() {
        return new Ferrari();
    }
}
public class PorscheFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Porsche();
    }
}

最后由客户直接找到对应车工厂实现

public class Customer {
    public static void main(String[] args) {
        Car porsche = new PorscheFactory().getCar();
        Car ferrari = new FerrariFactory().getCar();

        porsche.name();
        ferrari.name();
    }
}

优点:满足开闭原则

缺点:代码量太大,难以管理

结构复杂度:hard

代码复杂度:hard

编程负责度:hard

管理复杂度:hard

根据设计模式:选择工厂设计模式

根据实际业务:简单工厂模式(这也是大部分业务的选择)

所以说,设计模式好但不一定实用