新闻资讯

新闻资讯 行业动态

Spring框架中的设计模式——工厂方法

编辑:008     时间:2020-02-27

创建对象模式三剑客的第二个成员是工厂方法设计模式。它完全适于使用动态环境作为Spring框架。实际上,这种模式允许通过公共静态方法对象进行初始化,称为工厂方法。在这个概念中,我们需要定义一个接口来创建对象。但是创建是由使用相关对象的类创建的。

但是在跳到Spring世界之前,让我们用Java代码做一个例子:

  1. public class FactoryMethodTest {

  2.  @Test

  3.  public void test() {

  4.    Meal fruit = Meal.valueOf("banana");

  5.    Meal vegetable = Meal.valueOf("carrot");

  6.    assertTrue("Banana should be a fruit but is "+fruit.getType(), fruit.getType().equals("fruit"));

  7.    assertTrue("Carrot should be a vegetable but is "+vegetable.getType(), vegetable.getType().equals("vegetable"));

  8.  }

  9. }

  10. class Meal {

  11.  private String type;

  12.  public Meal(String type) {

  13.    this.type = type;

  14.  }

  15.  public String getType() {

  16.    return this.type;

  17.  }

  18.  // Example of factory method - different object is created depending on current context

  19.  public static Meal valueOf(String ingredient) {

  20.    if (ingredient.equals("banana")) {

  21.      return new Meal("fruit");

  22.    }

  23.    return new Meal("vegetable");

  24.  }

  25. }

在Spring中,我们可以通过指定的工厂方法创建bean。该方法与以前代码示例中看到的valueOf方法完全相同。它是静态的,可以采取没有或多个参数。为了更好地了解案例,让我们来看一下实例。首先搞定下配置:

  1. <bean id="welcomerBean" class="com.mysite.Welcomer" factory-method="createWelcomer">

  2.    <constructor-arg ref="messagesLocator"></constructor-arg>

  3. </bean>

  4. <bean id="messagesLocator" class="com.mysite.MessageLocator">

  5.    <property name="messages" value="messages_file.properties"></property>

  6. </bean>

现在请关注这个bean的初始化:

  1. public class Welcomer {

  2.  private String message;

  3.  public Welcomer(String message) {

  4.    this.message = message;

  5.  }

  6.  public static Welcomer createWelcomer(MessageLocator messagesLocator) {

  7.    Calendar cal = Calendar.getInstance();

  8.    String msgKey = "welcome.pm";

  9.    if (cal.get(Calendar.AM_PM) == Calendar.AM) {

  10.      msgKey = "welcome.am";

  11.    }

  12.    return new Welcomer(messagesLocator.getMessageByKey(msgKey));

  13.  }

  14. }

当Spring将构造welcomerBean时,它不会通过传统的构造函数,而是通过定义的静态工厂方法createWelcomer来实现。还要注意,这个方法接受一些参数(MessageLocator bean的实例包含所有可用的消息) 标签,通常保留给传统的构造函数。



原文链接:https://mp.weixin.qq.com/s/3AWW1OX5KwMDX4CM4c39kg

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐