“工厂方法”和“抽象工厂”之间的主要区别在于工厂方法是单一方法,而抽象工厂是对象。我认为很多人将这两个术语弄混了,并开始互换使用。我记得当我学习它们时,我很难找到确切的区别。
因为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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)