使用工厂模式的主要目标?

时间:2010-03-06 13:07:58

标签: java design-patterns

有些人推荐java中的工厂模式。我不知道。在java中使用工厂模式的主要目的是什么?给我你的建议哪种模式有用?

5 个答案:

答案 0 :(得分:3)

目标取决于工厂模式的类型,例如抽象工厂:“提供一个接口,用于创建相关或依赖对象的族,而无需指定其具体类。”来自Design Patterns

大多数工厂模式允许您放松创建请求和创建的对象类之间的耦合。这使您可以保留改变主意的权利。

此方法通常用于使用存根或模拟对象启用单元测试。

答案 1 :(得分:2)

工厂模式允许您在类和消费者之间解耦(减少依赖性)。不是让类使用构造函数创建它的依赖对象,而是为它提供一个知道如何创建对象的工厂,并使用工厂创建依赖对象。将接口与工厂结合使用可提供更大的解耦,因为它允许更改工厂以生成实现接口的不同具体对象,而无需更改消耗类。它通常以这种方式用于单元测试,在这种方式中,您提供依赖项的模拟实现,而不是用于测试的实际实现。但是,通常情况下,只要您有可能根据程序的状态或配置提供可实现接口的类的多个变体,工厂就很有用。

答案 2 :(得分:2)

有两种众所周知的工厂模式:

  • 工厂方法模式。
  • 抽象工厂模式。

工厂方法模式基本上“处理创建对象(产品)的问题,而不指定将要创建的确切对象类。”而抽象工厂模式“提供了一种封装一组具有共同主题的单个工厂的方法。”

工厂方法用于对象创建,基本上创建方法的工厂接口,子类可以派生并实现创建对象的方法。这允许封装不担心谁制作了对象,但是一旦方法被执行就完成了对象。

抽象工厂模式将具有same目标函数的工厂封装在一起以完成任务。例如。你可能有一个按钮GUI,并有WindowFactoryLinuxFactoryAppleFactory等可以创建这些按钮的工厂。将这些工厂包装到一个抽象工厂中,这样,提供操作系统,它将返回一个特定于操作系统的工厂来创建Button

希望这很清楚。很抱歉没有使用正确的英语建设性判决。

答案 3 :(得分:1)

主要的好处是,只要您想要更改代码中使用的具体实现,就不需要重写/重新构建/重新部署代码。使用Factory,您只需要更改要使用的实现类的外部配置设置(属性文件?)和/或更改包含实现的外部JAR文件。

您可以在几个Java API中看到这一点,它提供了创建特定于供应商的实现的可能性,例如JDBCJAXP等。

答案 4 :(得分:0)

您可以在以下情况下使用工厂模式(以多种形式之一):

  • 对象创建过于复杂,无法让对象自行负责。
  • 对象创建需要其他对象及其创建的交互/知识
  • 对象创建取决于全局状态/环境变量
  • 此类对象的请求者不应绑定到特定实现,而应绑定到接口(Abstract Factory的案例)