java - 理解工厂方法模式

标签 java design-patterns factory-pattern

我正在阅读工厂方法模式。

我可以理解当有一个工厂类时,即 StoreFactory#getStore(),它返回一个基于某些运行时或其他状态的 Store 实现。

但是,从阅读(例如 this link)来看,似乎存在一种人们创建抽象工厂类的一般模式,其他工厂类扩展到该抽象工厂类:

 public abstract class AbstractFactory {
     public abstract Store getStore(int store);
 }

 public class StoreFactoryA extends AbstractFactory {
     public Store getStore(int Store) {
         if(Store == 1) { return new MyStoreImplA(); }
         if(Store == 2) { return new MyStoreImplB(); }
     }
 }

 public class StoreFactoryB extends AbstractFactory {
     public Store getStore(int Store) {
         if(Store == 1) { return new MyStoreImplC(); }
         if(Store == 2) { return new MyStoreImplD(); }
     }
 }

 public class Runner {
    public static void main(String[] args) {
        AbstractFactory storeFactory = new StoreFactoryA();
        Store myStore = storeFactory.getStore(1);
    }
 }

我的例子是人为设计的,但是模拟了上述链接。

这个实现对我来说有点像先有鸡还是先有蛋。使用工厂方法模式消除了客户端代码指定类类型的需要,但现在客户端代码需要有选择地选择要使用的正确工厂,即 StoreFactoryAStoreFactoryB?

这里使用抽象类的原因是什么?

最佳答案

不幸的是,您正在阅读的链接没有给出该模式的实际示例。事实上,根据最初的 GoF 设计模式,这种模式称为抽象工厂(工厂方法是一种不同的模式)。

当您拥有可以创建对象系列的工厂时,使用抽象工厂模式。例如您可以拥有 AbstractGUIFactory,它可以拥有方法 createButton()、createWindow()、createTitleBar 等。然后,您将拥有像 WindowsGUIFactory、MacGUIFactory、 MotifGUIFactory 等,它们中的每一个都会以自己的方式生成 Button、Window、TitleBar 对象。

工厂将在应用程序的某个时刻设置为一个实现(可能使用配置),然后该工厂将在需要创建对象的任何地方使用。

如果您正在学习设计模式,最好的建议是从经典的 GoF 书籍开始。

关于java - 理解工厂方法模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293427/

相关文章:

java - 清除期间 couchdb gen_server 调用超时

java - 如何在JAVA中使用API​​创建新用户

java - 如何在写入文件之前关闭selenium java中的excel文件?

c# - 绘图应用程序使用哪种设计模式

java - 返回下一个值的模式?

oop - 恢复域对象的最佳方式

c++ - 工厂方法中的输出参数

java - XML解析后无法获得所需的输出

design-patterns - Builder 模式的真实示例

.net - .NET Framework 中的构造函数与工厂