这三种方式分别为:使用静态工厂创建对象,使用实例工厂创建对象,使用无参构造函数创建对象。
工厂模式:工厂提供服务(方法),客户只需要满足服务的条件即可,解耦很明显,这里自己的责任自己负责,每一环没有必要关心另一环的逻辑实现。
静态工厂和实例工厂区别:静态工厂指的是工厂的服务是静态的,也就是工厂提供的方法是static的,那么这些方法仅有工厂提供以及管理更新等,跟客户端或者说调用端是没有关系的;实例工厂指的是工厂提供的方法服务室非static的,那么客户端或者调用端是需要自己创建工厂对象然后去调用工厂中的方法或者服务的,那么管理这些方法或者服务相当于是客户端了。所以静态工厂和实例工厂主要是实际参与管理工厂管理者的不同,其次实例工厂设计相对灵活,客户端与工厂都可以参与管理设计,静态工厂相对正式死板。
以下三种创建对象的方法前两种是工厂模式创建,第三种是单例创建,工厂创建只需要注意是静态工厂还是实例工厂,对象都是在工厂中创建出来的,因此,工厂创建模式配置相对比较少。单例创建对象的话需要多少对象就创建多少对象,相对配置较多。比如第一种静态创建对象,
下面见代码:
静态工厂创建对象:
一:通过静态工厂模式创建对象
package cn.itcast.beans;
public class Bean1 {
public void add(){
System.out.println("bean1 ........");
}
}
package cn.itcast.beans;
public class Bean1_factory {
public static Bean1 getBean(){
return new Bean1();
}
}
二:通过实例工厂模式创建对象
package cn.itcast.beans;
public class Bean2 {
public void add(){
System.out.println("bean2 ........");
}
}
package cn.itcast.beans;
public class Bean2_factory {
public Bean2 getBean(){
return new Bean2();
}
}
三:通过简单构造函数创建单例对象
package cn.itcast.beans;
public class Bean3 {
public void add(){
System.out.println("bean3 ........");
}
}
package cn.itcast.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args){
ApplicationContext context =
new ClassPathXmlApplicationContext("beans01.xml");
Bean1 b1 = (Bean1)context.getBean("bean1");
Bean2 b2 = (Bean2)context.getBean("bean2");
Bean3 b3 = (Bean3)context.getBean("bean3");
b1.add();
b2.add();
b3.add();
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用静态工厂创建对象 -->
<bean id="bean1" class="cn.itcast.beans.Bean1_factory"
factory-method="getBean">
</bean>
<!-- 使用实例工厂创建对象 -->
<bean id="bean2_fcty" class="cn.itcast.beans.Bean2_factory">
</bean>
<bean id="bean2" factory-bean="bean2_fcty" factory-method="getBean">
</bean>
<!-- 使用无参构造函数创建对象 -->
<bean id="bean3" class="cn.itcast.beans.Bean3">
</bean>
</beans>