设计模式 - 简单工厂模式

44 阅读1分钟

前提代码

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("保时捷");
    }
}

最原始的写法,客户直接创建Car

image.png


/**
 * 客户
 **/
public class Customer {
    public static void main(String[] args) {
        // 使用接口实现
        Car porsche = new Porsche();
        Car ferrari = new Ferrari();
        porsche.name();
        ferrari.name();
    }
}

简单工厂模式 - 用户从工厂拿车,不用关心拿车细节

image.png

代码文件如下图

image.png

/**
 * 简单工厂模式 / 静态工厂模式
 * 缺点:不满足开闭原则,需要修改代码
 */
public class CarFactory {

    public static Car getCar(String car) {
        // 方法一
        if (car.equals("Porsche")) {
            return new Porsche();
        } else if (car.equals("Ferrari")) {
            return new Ferrari();
        } else {
            return null;
        }
    }

    // 方法二
    public static Car getPorsche() {
        return new Porsche();
    }

    public static Car getFerrari() {
        return new Ferrari();
    }
}
public class Customer {
    public static void main(String[] args) {
        // 使用工厂实现
        Car p1 = CarFactory.getCar("Porsche");
        Car f1 = CarFactory.getCar("Ferrari");
        p1.name();
        f1.name();

        Car p2 = CarFactory.getPorsche();
        Car f2 = CarFactory.getFerrari();
        p2.name();
        f2.name();
    }
}