有人能解释一下工厂模式和战略模式之间的区别吗?
对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)
有人能解释一下工厂模式和战略模式之间的区别吗?
对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)
当前回答
策略模式允许您多态地更改类的行为。
工厂模式允许封装对象创建。
加里说得很好。如果您使用的编码原则是抽象的,而不是“具体化”的,那么很多模式看起来就像是主题的变体。
其他回答
工厂模式是一种创建模式。战略模式是一种操作模式。换句话说,工厂模式用于创建特定类型的对象。策略模式用于以特定方式执行一个操作(或一组操作)。在经典的例子中,工厂可能会创建不同类型的动物:狗、猫、虎,而策略模式将执行特定的动作,例如,移动;使用跑,走或Lope策略。
事实上,这两者可以一起使用。例如,您可能有一个创建业务对象的工厂。它可以根据持久性介质使用不同的策略。如果数据以XML形式存储在本地,则使用一种策略。如果数据位于不同的远程数据库中,则它将使用另一个数据库。
简单来说,策略模式更多的是运行时行为的创建,您不关心实现类。另一方面,工厂是运行时创建的具体类实例,它是由你使用任何行为(方法)公开的实现接口。
战略和工厂是不同的目的。在策略中,您已经定义了方法,使用此模式可以交换行为(算法)。来到工厂有很多变化。但是GO4状态工厂的原始模式将对象的创建留给了子类。这里用工厂替换的是完整的实例,而不是你感兴趣的行为。这样你将取代整个系统,而不是算法。
简而言之:
工厂是用于创建具有相同行为的多个对象,而策略是用于具有不同工作方式的一个对象。
根据奥斯卡的说法和他的准则:
getCommand是工厂类,UnixCommand、WindowsCommand和OSXCommand类是策略类