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

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


当前回答

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

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

其他回答

工厂模式是一种创建模式,使用指定的属性(行为)创建。而在创建后的运行时,你不能改变它的属性(行为)。因此,如果你需要不同的属性(行为),你必须删除对象,并创建具有所需属性(行为)的新对象。这可不是什么好事。 而在策略模式的情况下,你可以在运行时改变属性(行为)。

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

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

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

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

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

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

简而言之:

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