您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

抽象工厂和工厂设计模式之间有什么区别?

抽象工厂和工厂设计模式之间有什么区别?

“工厂方法”和“抽象工厂”之间的主要区别在于工厂方法是单一方法,而抽象工厂是对象。我认为很多人将这两个术语弄混了,并开始互换使用。我记得当我学习它们时,我很难找到确切的区别。

因为factory方法只是一个方法,所以可以在子类中覆盖它,因此引号的后半部分:

…工厂方法模式使用继承,并依赖于子类来处理所需的对象实例化。

引用假定此处对象正在调用 其自己的 工厂方法。因此,唯一可以更改返回值的是子类。

抽象工厂是一个具有多种工厂方法的对象。查看报价的前半部分:

…使用Abstract Factory模式,一个类通过组合将对象实例化的责任委托给另一个对象…

他们在说的是,有一个对象A,他想制作一个Foo对象。与其创建Foo对象本身(例如,使用工厂方法),不如创建 一个 对象(抽象工厂)来创建Foo对象。

为了说明不同之处,以下是使用的工厂方法

class A {
    public void doSomething() {
        Foo f = makeFoo();
        f.whatever();   
    }

    protected Foo makeFoo() {
        return new RegularFoo();
    }
}

class B extends A {
    protected Foo makeFoo() {
        //subclass is overriding the factory method 
        //to return something different
        return new SpecialFoo();
    }
}

这是一个正在使用的抽象工厂:

class A {
    private Factory factory;

    public A(Factory factory) {
        this.factory = factory;
    }

    public void doSomething() {
        //The concrete class of "f" depends on the concrete class
        //of the factory passed into the constructor. If you provide a
        //different factory, you get a different Foo object.
        Foo f = factory.makeFoo();
        f.whatever();
    }
}

interface Factory {
    Foo makeFoo();
    Bar makeBar();
    Aycufcn makeAmbiguousYetCommonlyUsedFakeClassName();
}

//need to make concrete factories that implement the "Factory" interface here
其他 2022/1/1 18:19:54 有726人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶