有人能解释一下工厂模式和战略模式之间的区别吗?
对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)
有人能解释一下工厂模式和战略模式之间的区别吗?
对于我来说,两者看起来是一样的,除了一个额外的工厂类(在工厂模式中创建一个product对象)
当前回答
工厂模式是一种创建模式,使用指定的属性(行为)创建。而在创建后的运行时,你不能改变它的属性(行为)。因此,如果你需要不同的属性(行为),你必须删除对象,并创建具有所需属性(行为)的新对象。这可不是什么好事。 而在策略模式的情况下,你可以在运行时改变属性(行为)。
其他回答
您不能仅仅通过查看代码或分类来理解其中的区别。要正确掌握GoF模式,请寻找它们的意图:
策略:“定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。”
工厂方法:定义一个用于创建对象的接口,但是让子类来决定实例化哪个类。工厂方法允许类延迟实例化到子类。
下面是关于这两种模式的意图和区别的详细解释:工厂方法和策略设计模式的区别
工厂(方法)模式。
只创建具体实例。不同的参数可能导致不同的对象。这取决于逻辑等等。
战略模式。
封装算法(步骤)以执行操作。所以你可以改变策略,使用另一种算法。
虽然两者看起来非常相似,但目的却截然不同,一个目的是创造,另一个目的是执行动作。
所以。如果你的Factory方法是固定的,你可以像这样:
public Command getCommand( int operatingSystem ) {
switch( operatingSystem ) {
case UNIX :
case LINUX : return new UnixCommand();
case WINDOWS : return new WindowsCommand();
case OSX : return new OSXCommand();
}
}
但是假设您的工厂需要更高级或更动态的创建。你可以在工厂方法中添加策略并在不需要重新编译的情况下更改它,策略可以在运行时更改。
策略模式允许您多态地更改类的行为。
工厂模式允许封装对象创建。
加里说得很好。如果您使用的编码原则是抽象的,而不是“具体化”的,那么很多模式看起来就像是主题的变体。
工厂模式是关于决定创建哪个对象,而策略模式是关于使用创建的对象。例如,使用哪种策略可以由工厂模式决定
战略和工厂是不同的目的。在策略中,您已经定义了方法,使用此模式可以交换行为(算法)。来到工厂有很多变化。但是GO4状态工厂的原始模式将对象的创建留给了子类。这里用工厂替换的是完整的实例,而不是你感兴趣的行为。这样你将取代整个系统,而不是算法。