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

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


当前回答

根据奥斯卡的说法和他的准则:

getCommand是工厂类,UnixCommand、WindowsCommand和OSXCommand类是策略类

其他回答

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

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.

工厂模式是一种创建模式。战略模式是一种操作模式。换句话说,工厂模式用于创建特定类型的对象。策略模式用于以特定方式执行一个操作(或一组操作)。在经典的例子中,工厂可能会创建不同类型的动物:狗、猫、虎,而策略模式将执行特定的动作,例如,移动;使用跑,走或Lope策略。

事实上,这两者可以一起使用。例如,您可能有一个创建业务对象的工厂。它可以根据持久性介质使用不同的策略。如果数据以XML形式存储在本地,则使用一种策略。如果数据位于不同的远程数据库中,则它将使用另一个数据库。

Factory(和Factory返回的FactoryMethod):

创建型模式 基于继承 工厂返回一个工厂方法(接口),该方法返回具体对象 你可以用新的具体对象代替接口,客户端(调用者)不应该知道所有的具体实现 客户端始终只访问接口,您可以在Factory方法中隐藏对象创建细节

看看这篇维基百科和javarevisited的文章

策略模式:

这是一种行为模式 它是基于委派的 它通过修改方法行为来改变对象的内容 它用来在一系列算法之间切换 它在运行时改变对象的行为

例子:

您可以为特定的项目(机票或购物车项目)配置折扣策略。在本例中,您将在7月至12月期间提供25%的折扣,而在1月至6月期间不提供折扣。

相关文章:

策略模式的真实例子

设计模式:工厂vs工厂方法vs抽象工厂

策略模式允许您多态地更改类的行为。

工厂模式允许封装对象创建。

加里说得很好。如果您使用的编码原则是抽象的,而不是“具体化”的,那么很多模式看起来就像是主题的变体。