Tag: factory pattern

在哪些情况下使用工厂类而不是静态函数是有意义的?

目前我已经创建了一个ABCFactory类,它有一个创建ABC对象的方法。 现在我想起来了,也许不是有工厂,我可以在我的ABC方法中制作一个静态方法。 进行此项更改的专业人士和合作伙伴是什么? 它不会导致相同吗? 我没有预见到其他类会inheritanceABC,但是我从来不知道! 谢谢

Java Pattern类没有公共构造函数,为什么?

我一直在审查Java Regex Library,感到惊讶的是Pattern类没有我多年来认为理所当然的公共构造函数。 我怀疑静态compile方法被用于支持构造函数的一个原因可能是构造函数总是返回一个新对象,而静态方法可能返回一个先前创建的(和缓存的)对象,前提是模式字符串是相同的。 但是,如下所示,情况并非如此。 public class PatternCompiler { public static void main(String[] args) { Pattern first = Pattern.compile(“.”); Pattern second = Pattern.compile(“.”); if (first == second) { System.out.println(“The same object has been reused!”); } else { System.out.println(“Why not just use constructor?”); } } } 使用静态方法而不是构造函数的任何其他强有力的理由? 编辑 :我在这里找到了一个相关的问题 。 那里的答案都没有说服我。 通过阅读所有答案,我感觉静态方法相对于公共构造函数在创建对象方面具有相当多的优势,而不是相反。 真的吗? 如果是这样,我将为我的每个类创建这样的静态方法,并安全地假设它更具可读性和灵活性。

Spring formBackingObject,业务对象创建和工厂

在Spring SimpleFormController中使用Business Objects作为formBackingObjects的设计问题。 我们的控制器的职责是允许最终用户向我们的Web应用程序添加新的业务对象。 所以我们通过formBackingObject(HttpServletRequest请求)方法传递我们的业务对象。 但是,我们遇到了一个难题。 我们用于创建新业务对象的工厂强制执行某些属性不能为null的业务规则。 但是因为我们不知道最终用户想要输入什么,所以我们一直在传递“合理的默认值”,例如“请输入你想要的名字”,但这似乎充满了hackie / icky。 什么是开发人员? 我觉得这是经典的鸡/蛋问题。 我们所有的业务对象都基于接口,我们是否应该创建一个代表业务对象的存根,将存根作为formBackingObject传递,然后将Stub传递给工厂提交表单? 或者我们不应该在formBackingObject中传递任何内容,然后手动从请求中收集提交的信息? 还有其他合理的想法/模式吗? 感谢您的时间。

我们是否需要优先选择构造函数而不是静态工厂方法? 如果是的话,何时?

我一直在阅读Joshua Bloch撰写的 Effective Java ,到目前为止,它确实辜负了它的声誉。 第一个项目为构造函数的 静态工厂方法提供了令人信服的理由。 这么多,我开始质疑好老建设者的有效性:)。 本书的优点/缺点总结如下: 优点: 他们有名字! 我们有全面的实例控制(单身人士,表现等) 他们可以返回子类型/接口 编译器可以提供类型推断 缺点: 私有类不能被子类化 它们不像构造函数那样在文档中脱颖而出 第一个缺点实际上可能是A Good Thing (正如书中所提到的)。 第二个,我认为只是一个小缺点,可以通过即将发布的java版本轻松解决(javadoc的注释等) 看起来,最终工厂方法几乎具有构造函数的所有优点,许多优点,并没有真正的缺点! 所以,我的问题基本上分为三个部分: 默认情况下总是在构造函数上使用静态工厂方法是一种好习惯吗? 使用构造函数是否合理? 为什么面向对象的语言不能为工厂提供语言级支持? 注意:有两个类似的问题: 何时使用构造函数以及何时使用getInstance()方法(静态工厂方法)? 和对象的创建:构造函数或静态工厂方法 。 然而,答案要么只是提供上面的列表,要么重申我已经知道的静态工厂方法背后的基本原理。

工厂方法,为什么我们使用静态调用从工厂获取对象

到目前为止我的理解是在使用工厂方法时通过调用工厂的静态方法来获取对象..就像Foo f = Factory.getObj() ..这个方法是静态的,因为我们不需要创建一个在调用getObj方法之前的对象,该方法实际上将返回我想要的具体对象。 但是为什么使用new Factory()然后调用req getObj方法创建Factory类的实例并不常见? 对不起,如果这听起来很愚蠢,但为什么将工厂方法设为静态是很常见的? 静电厂和工厂也是两回事吗?

如何在运行时基于Spring而不使用XML的属性注入不同的服务

我正在使用Spring Boot for Java独立应用程序。 我有一个使用服务的bean。 我想在运行时注入该服务的不同实现,基于Spring属性文件中的属性(就此而言为4)。 这听起来像工厂模式,但Spring也允许使用注释来解决问题,就像这样。 @Autowired @Qualifier(“selectorProperty”) private MyService myService; 然后在beans.xml文件中我有一个别名,这样我就可以在@Qualifier中使用该属性。 在我的不同实现中,我会有不同的限定符。 @Component(“Selector1”) public class MyServiceImpl1 @Component(“Selector2”) public class MyServiceImpl2 application.properties selector.property = Selector1 selector.property = Selector2 而对于工厂模式,在Spring中,您可以使用ServiceLocatorFactoryBean来创建一个可以提供相同function的工厂。 public interface MyServiceFactory { MyService getMyService(String selector); } 然后在你的bean中你可以使用类似的东西在运行时获得正确的实现,具体取决于属性的值。 @Value(“${selector.property}”) private String selectorProperty; @Autowired private MyServiceFactory myServiceFactory; private MyService myService; @PostConstruct public void postConstruct() { […]

基于注释的ServiceLocatorFactoryBean?

我想在我的项目中实现Factory模式。我已经浏览了在线资源,我开始知道应该实现Spring ServiceLocatorFactoryBean而不是普通的java工厂模式…. 我已经按照这个链接,但它是基于xml解释….任何人都可以告诉我如何使用基于工厂模式的注释?