Factory Method(工厂方法)模式

Factory Method(工厂方法)模式的主要意图是用于创建对象的接口,同时控制对哪个对象进行实例化。在工厂方法中,工厂方法用户不必知道该实例化什么类,其意图主要在于为所实例化的多个类定义一个公共接口,并由服务提供者而不是由客户代码来确定将要实例化上述类中的哪一个类。


工厂方法模式经常出现在客户代码中,尤其发生在客户代码不需要了解具体实例化哪一个类的情况下。使用工厂方法模式的典型范例是Collection框架中的迭代器。Iterator模式提供顺序访问集合中元素的一种方式,但是创建迭代器常常要使用Factory Method模式。Java 1.2引入了Collection接口,其中包括iterator()方法,所有集合都要实现这个方法,iterator()使得调用者不必了解需要实例化哪个类。


在Java Collection框架中,抽象类AbstractList<E>拥有如下方法:

其中,Itr定义为AbstractList<E>的一个内部私有类,代码示例如下:

 

通过iterator()方法创建的对象顺序包含了集合中的各个元素,迭代器的具体使用可以参考如下代码:

 

在常用的Spring Web架构中,org.springframework.beans.factory.BeanFactory接口提供了Object getBean(String name)及其重载方法,可以将其看作Factory Method模式的一个典型应用。


使用Factory Method工厂方法模式的简易示例代码如下:

(1)定义多个类的公共接口Store

 

(2)实现具体的工厂方法

 

(3)测试类及输出结果

 

注:在上述示例中,FileStore和DatabaseStore并非一定要实现为StoreFactory的内部私有类。同时,在工厂方法模式中,有时候对公共接口的要求并非如此严格。例如,在Spring架构中,通过Spring IoC容器返回的Java对象间彼此关系通常都十分松散,并没有实现共同的接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值