设计模式-抽象工厂模式(升级版工厂方法模式)

首先,需要了解一下java设计模式6大原则中的开闭原则:只对 拓展开放,修改关闭。也就是你可以继承我的类来进行拓展,但不能重写我的方法。

如果将方法比喻为工厂,对象成为产品,工厂模式就是调用固定的方法来创建固定的对象,但是如果想添加新产品的时候会违反开闭原则。所以要将工厂方法和产品抽象化,添加新产品的时候不用修改原来的代码,也不用违反开闭原则。单一工厂生产单一产品,共同实现公共接口

公共抽象工厂来生产产品

abstract class Factory {
    public abstract Product produce();
}

公共抽象产品类

abstract class Product {
    public abstract  void work();
}

具体产品A

public class ProductA extends Product {
    @Override
    public void work() {
        System.out.println("生产第一种商品");
    }
}

具体工厂1生产产品A

public class FactoryA extends Factory {
    @Override
    public Product produce() {
        return new ProductA();
    }
}

具体产品B

public class ProductB extends Product {
    @Override
    public void work() {
        System.out.println("生产第二种商品");
    }
}

具体工厂B来生产产品B

public class FactoryB extends Factory {
    @Override
    public Product produce() {
        return new ProductB();
    }
}

测试类

public class Client {
    public static void main(String[] args) {
       //生产A产品
        FactoryA factoryA = new FactoryA();
        factoryA.produce().work();
       //生产B产品
        FactoryB factoryB = new FactoryB();
        factoryB.produce().work();
    }
}

在将工厂和产品都抽象化之后 好处和坏处是显而易见的

好处:真正满足了开闭原则,添加新产品只需要继承公共工厂类和公共产品类,无需修改公共类,单一职业,每个工厂只负责生产对应的产品

坏处:耦合度高了,如果产品变化,生产它的对应工厂代码也可能变化,而且代码是成对增加的。

应用场景:创建对象时不需要知道具体的类名,只需要委托给对应的工厂,创建好对象后可以再动态指定类型,



不和别人一样,不复制只真正理解
原文地址:https://www.cnblogs.com/Vinlen/p/12780479.html