第四章 工厂模式 Factory

创建型设计模式

定义:

  定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类

类图:

 

 

应用:

  • 当一个类不知道它所需要的对象的类时在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可
  • 当一个类希望通过其子类来指定创建对象时在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展
  • 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中

Spring中的FactoryBean,就是使用工厂方法模式

 

FactoryBean

  Spring 中为我们提供了两种类型的bean,一种就是普通的bean,我们通过getBean(id)方法获得是该bean的实际类型,另外还有一种bean是 FactoryBean,也就是工厂 bean,我们通过getBean(id)获得是该工厂所产生Bean的实例,而不是该FactoryBean的实例。FactoryBean是一个Bean,实现了FactoryBean接口的类有能力改变bean,FactoryBean希望你实现了它之后返回一些内容,Spring会按照这些内容去注册bean。public interface FactoryBean<T>,提供如下方法:


  通常情况下,bean无须自己实现工厂模式,Spring容器担任工厂角色;但少数情况下,容器中的bean本身就是工厂,作用是产生其他bean实例。由工厂bean产生的其他bean实例,不再由Spring容器产生,因此与普通bean的配置不同,不再需要提供class元素

 

BeanFactory

  是一个接口,public interface BeanFactory,提供如下方法:

  在 Spring 中,BeanFactory是 IoC 容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。BeanFactory 提供的高级配置机制,使得管理任何性质的对象成为可能。ApplicationContextBeanFactory 的扩展,功能得到了进一步增强,比如更易与 Spring AOP 集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的 context 实现(如针对 web 应用的WebApplicationContext)。用的比较多的 BeanFactory 的子类是 ClassPathXmlApplicationContext,这是 ApplicationContext接口的一个子类,ClassPathXmlApplicationContext从 xml 的配置文件中获取 bean 并且管理他们,例如:

public static void main(String[] args) throws Exception {
    BeanFactory bf = new ClassPathXmlApplicationContext("test.xml");
    Test testBean= (Test) bf.getBean("testBean");
    testBean.print();
}

XML配置如下:

<bean id="testBean" class="com.Test">
    <property name="name" value="Tom"/>
    <property name="age" value="18"/>
</bean>
 
 
 

posted on 2018-10-21 18:13  胡子就不刮  阅读(93)  评论(0编辑  收藏  举报

导航