工厂模式浅谈

473 阅读2分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

一、工厂模式是什么

工厂模式就是具体工厂创建具体的产品,用户只需要知道工厂的名称,就可以获得具体的产品。即有一个抽象产品工厂生产抽象的猫。那么,对应的每一种具体的产品都由具体的一个工厂生产,比如有一种红颜色的猫,就需要由生产红猫的具体工厂生产。我们只需要知道生产红猫的工厂的名字,既可以获得红颜色的猫。

二、工厂模式的实现

public interface CatFactory {
    CatProduct getCat();
}

生产猫的抽象产品工厂

public interface CatProduct {
    void sayMyName();
}

抽象产品猫

public class RedCatProduct implements CatProduct{
    @Override
    public void sayMyName() {
        System.out.println("I am  a red cat!");
    }
}

具体产品红猫

public class RedCatFactory implements CatFactory{
    @Override
    public CatProduct getCat() {
        return new RedCatProduct();
    }
}

具体工厂红猫工厂

public class BlankCatProduct implements CatProduct{
    @Override
    public void sayMyName() {
        System.out.println("I am a blank cat!");
    }
}

具体产品黑猫

public class BlankCatFactory implements CatFactory{
    @Override
    public CatProduct getCat() {
        return new BlankCatProduct();
    }
}

具体工厂黑猫工厂

public static void main(String[] args) {
    CatFactory redCatFactory = new RedCatFactory();
    CatProduct catA = redCatFactory.getCat();
    CatFactory blankFactory = new BlankCatFactory();
    CatProduct catB = blankFactory.getCat();
    catA.sayMyName();
    catB.sayMyName();
}

工厂模式生产产品,需要有抽象的工厂和抽象的产品,然后具体的产品和工厂具体实现,不同的产品不同的工厂。最后使用时直接通过不同的工厂获得不同的产品。 image.png

三、总结

优点:可以隐藏产品创建的具体过程,只需要知道产品对应的工厂的名称,就可以获得对应的产品。此外,新建产品只需要新增工厂类和产品类(比如多了黄猫这种产品,就需要新增一个黄猫工厂)。

缺点:随着产品增多,类的个数会不停增多,增加了系统的复杂性。还有就是一个工厂只能创建一种产品。

总结起来工厂模式适用于用户只需要获得产品,不需要知道具体的实现。此外,工厂模式符合开闭原则。

简单工厂模式和工厂模式还有抽象工厂模式的区别:

  1. 简单工厂模式即一个工厂可以生产多个同类的产品,比如简单工厂模式的狗狗工厂可以生产各种大小的狗狗。如果新增产品,就需要修改简单工厂的代码,不符合开闭原则。

  2. 工厂模式每个工厂生产具体的产品,符合开闭原则。与简单工厂的不同在于无需向简单工厂那样修改工厂的代码。

  3. 抽象工厂是工厂模式的一种升级版本,解决了工厂模式一个工厂无法创建多类产品的问题,同样符合开闭原则。