工厂方法模式扩展(一):简单工厂模式 & 多工厂模式

↘锁芯ラ 提交于 2019-12-11 05:19:31

工厂方法模式扩展(一)

这篇博客主要介绍工厂方法模式的两种扩展:简单工厂模式(静态工厂方法模式)和多工厂模式

1. 简单工厂模式

这个模式在我的另一篇博客也写到过:点击查看

简单工厂模式,又叫静态工厂方法模式。它的类图如下:

                         

简单工厂模式,没有抽象的工厂接口,将工厂方法设置为静态方法,直接通过类名调用。它的优点就是足够简单。

与普通的工厂方法模式相比,简单工厂模式的扩展性很差,每次增加一个产品,都需要修改工厂方法,不符合开闭原则。但是,对于长期稳定的工厂来说,使用简单工厂模式也是可以选择的

2. 多个工厂类

因为简单工厂类实现了一个抽象的工厂接口,所以,有多个工厂类实现这个接口是“理所当然的”。可以给每一个产品类都对应一个工厂。就像下面的例子:

                       

每个产品对应一个工厂,非常符合单一职责原则。但这样做也是不推荐的,产品类和工厂类数目相同,维护时需要考虑两个对象之间的关系。

这样的多工厂方式可以用来进行扩展,例如,原来的工厂方法是这样的,现在又来了一个新的需求,需要“生产”三角形,(这个例子在源代码里改也非常简单,但是如果是一个很大的项目,大到很难理清关系,改动源代码是有风险的,所以可以使用符合开闭原则的方式进行扩展)

public class ShapeFactory implements Factory {
    /**
     * 根据传入的Class类的对象,通过反射创建一个类的实例
     */
    @Override
    public Shape createShape(String shape) {
        Shape s = null;
        if(shape.equals("circle")){
            s = new Circle();
        } else if(shape.equals("square"){
            s = new Square();
        }
    }
}

修改后的类图如下,代码就不写了,没啥意思

                           

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!