我似乎不明白工厂方法和抽象工厂方法之间的基本区别。苹果产品场景的解释
I dont seem to understand the basic difference between factory method and abstract factory method.. Explanation with scenario of apple products
关于抽象工厂和工厂方法之间的区别,我也回答了之前的几个问题。假设,我有苹果工厂,它生产 3 种不同的苹果产品,iphone、ipod 和 ipad。这 3 种产品的规格也不同。但可能有一些相似之处。应该使用哪种设计模式。
感谢任何帮助。谢谢
如果你想要一个工厂函数returns某种AppleProduct*
到IPhone
、IPod
或IPad
的实例,那么将构成工厂方法模式。
如果你想要 "retina" class 显示设备和非视网膜设备的不同工厂函数,你的程序可能首先从视网膜和非视网膜工厂中选择一个具体的工厂方法,然后从抽象工厂接口访问该具体工厂。这有效地为您提供了一些工厂模式,因此您可以以相同的方式使用视网膜或非视网膜产品,但可以一次性决定处理哪一组产品。与上述更简单的直接使用工厂方法模式相比,这种模式的要求要少得多。
这两种模式实际上并不矛盾。工厂模式表示调用者不必知道对象的实现(只是接口)。抽象工厂模式表示如果所需对象遵循层次结构,则工厂遵循 "similar" 层次结构
因此在您的示例中,您可以应用抽象工厂模式。你有一个 AbstractAppleProduct class 和 3 个子classes 和一个 AbstractAppleProductFactory 也有 3 个其他子classes.
关于抽象工厂和工厂方法之间的区别,我也回答了之前的几个问题。假设,我有苹果工厂,它生产 3 种不同的苹果产品,iphone、ipod 和 ipad。这 3 种产品的规格也不同。但可能有一些相似之处。应该使用哪种设计模式。
感谢任何帮助。谢谢
如果你想要一个工厂函数returns某种AppleProduct*
到IPhone
、IPod
或IPad
的实例,那么将构成工厂方法模式。
如果你想要 "retina" class 显示设备和非视网膜设备的不同工厂函数,你的程序可能首先从视网膜和非视网膜工厂中选择一个具体的工厂方法,然后从抽象工厂接口访问该具体工厂。这有效地为您提供了一些工厂模式,因此您可以以相同的方式使用视网膜或非视网膜产品,但可以一次性决定处理哪一组产品。与上述更简单的直接使用工厂方法模式相比,这种模式的要求要少得多。
这两种模式实际上并不矛盾。工厂模式表示调用者不必知道对象的实现(只是接口)。抽象工厂模式表示如果所需对象遵循层次结构,则工厂遵循 "similar" 层次结构
因此在您的示例中,您可以应用抽象工厂模式。你有一个 AbstractAppleProduct class 和 3 个子classes 和一个 AbstractAppleProductFactory 也有 3 个其他子classes.