有人能解释一下工厂模式和战略模式之间的区别吗?

对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)


当前回答

简而言之:

工厂是用于创建具有相同行为的多个对象,而策略是用于具有不同工作方式的一个对象。

其他回答

简而言之:

工厂是用于创建具有相同行为的多个对象,而策略是用于具有不同工作方式的一个对象。

战略和工厂是不同的目的。在策略中,您已经定义了方法,使用此模式可以交换行为(算法)。来到工厂有很多变化。但是GO4状态工厂的原始模式将对象的创建留给了子类。这里用工厂替换的是完整的实例,而不是你感兴趣的行为。这样你将取代整个系统,而不是算法。

工厂模式是关于决定创建哪个对象,而策略模式是关于使用创建的对象。例如,使用哪种策略可以由工厂模式决定

First of all a difference between simple factory and abstract factory must be made. The first one is a simple factory where you only have one class which acts as a factory for object creation, while in the latter you connect to an factory interface (which defines the method names) and then call the different factories that implement this interface which are supposed to have different implementations of the same method based on some criteria. For example, we have a ButtonCreationFactory interface, which is implemented by two factories, the first WindowsButtonCreationFactory (creates buttons with Windows look and feel) and the second LinuxButtonCreationFactory (creates buttons with Linux look and feel). So both these factories do have the same creation method with different implementations (algorithms). You can reference this in runtime based on the method that you type of button that you want.

例如,如果你想要带有Linux外观和感觉的按钮:

ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);

或者你想要Windows按钮

ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);

Exactly in this case, it results in a kind of strategy pattern, since it differentiates algorithms for doing some creation. However, it differs from it semantically because it is used for OBJECT CREATION rather than operational algorithms. So, basically with abstract factory you have object creation using different strategies, which makes it very similar to the strategy pattern. However the AbstractFactory is creational, while the Strategy pattern is operational. Implementation wise, they result to be the same.

简单来说,策略模式更多的是运行时行为的创建,您不关心实现类。另一方面,工厂是运行时创建的具体类实例,它是由你使用任何行为(方法)公开的实现接口。