GOF 设计模式小白教程之工厂方法

本贴最后更新于 1696 天前,其中的信息可能已经物是人非

工厂方法

定义:

定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这符合六大原则中的依赖倒置原则。依赖抽象而不依赖实现。

通俗解释:

有一个顾客想去 4S 店试车,不管他去到哪一家 4S 店只要说我想试车。4S 店就会给他一辆车试开。这里的顾客就是用户类,说“我想试车”就是用户的调用方法。4S 店就是抽象工 具体工厂有宝马 4S 店,奔驰 4S 店。车就是抽象商品,宝马车奔驰车就是具体商品。下一 顾客去沃尔沃的话,还是只需要说原来的那句话“我想试车”。不需要改变自己的话就可 以继续试其他 4S 店的车。

代码:

抽象工厂类:4S 店

public interface Abstract4S {
    Car getCar();
}

具体工厂类:奔驰 4S 店和宝马 4S 店

public class Benz4S implements Abstract4S{
    @Override
    public Car getCar() {
        return new BenzCar();
    }
}
public class Bmw4S implements Abstract4S{
    @Override
    public Car getCar() {
        return new BwmCar();
    }
}

抽象商品类:车子

public interface Car {
    void start();
}

具体商品类:奔驰车、宝马车

public class BenzCar implements Car{
    @Override
    public void start() {
        System.out.println("启动奔驰车!");
    }
}
public class BwmCar implements Car{
    @Override
    public void start() {
        System.out.println("启动宝马车!");
    }
}

用户类调用试车方法:

public class TestDriveCar {

    public static void main(String[] args) {
        // 同一个方法可以处理不同4S店的试车
        testCar(new Benz4S());
        testCar(new Bmw4S());

    }

    public static void testCar(Abstract4S fourS) {
        Car car = fourS.getCar();
        car.start();
    }

}

解析:

在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,
满足开闭原则;其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,
这增加了系统的复杂度。

  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...