实现工厂模式的三种方式

例子:以获取当前时间 Calendar对象为例
一.静态工厂
核心:通过静态方法实例化对象
1创建一个StaticFactory类
public class StaticFactory {
public static Calendar getInstance() {
return Calendar.getInstance();
}
}
2配置xml文件

<!--Spring中静态工厂 
spring解析方式:
	1.当spring容器加载bean标签时,这时实例化对象
	2.spring容器加载工厂类.通过factory-method中标识的方法
	实例化对象.
	3.spring将id和对象进行保存.方便对象获取.
 -->
<!-- 静态工厂 -->
<bean id="calendar1" class="com.jt.manage.factory.StaticFactory" factory-method="getInstance"/>

3测试是否实现
@Test
public void testStaticFactory(){
 ApplicationContext context = 
		 new ClassPathXmlApplicationContext("/spring/factory.xml");
 Calendar calendar = (Calendar) context.getBean("calendar1");
 System.out.println("获取时间:"+calendar.getTime());
}

二.实例化工厂
核心:通过对象.方法创建对象
1创建一个InstanceFactory类
public class InstanceFactory {
public Calendar getInstance() {
return Calendar.getInstance();
}
}
2配置xml文件

<bean id="instanceFactory" class="com.jt.manage.factory.InstanceFactory"/>
<bean id="calendar2" factory-bean="instanceFactory" factory-method="getInstance"/>
3测试是否实现

@Test
public void testInstanceFactory() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring/factory.xml");
Calendar calendar = (Calendar) context.getBean(“calendar2”);
System.out.println(“当前时间:”+calendar.getTime());
}
三.Spring工厂模式
核心:通过实现特定的接口,之后回调实例化对象
1创建一个SpringFactory类
public class SpringFactory implements FactoryBean{
@Override
public Calendar getObject() throws Exception {
return Calendar.getInstance();
}
@Override
public Class<?> getObjectType() {
return Calendar.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
2配置xml文件

<!-- spring工厂 -->
<bean id="calendar3" class="com.jt.manage.factory.SpringFactory"/>

3测试是否实现
@Test
public void testSpringFactory() {
	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring/factory.xml");
	
	Calendar calendar = (Calendar) context.getBean("calendar3");
	System.out.println("当前时间:"+calendar.getTime());
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值