這三種方式分别為:使用靜态工廠建立對象,使用執行個體工廠建立對象,使用無參構造函數建立對象。
工廠模式:工廠提供服務(方法),客戶隻需要滿足服務的條件即可,解耦很明顯,這裡自己的責任自己負責,每一環沒有必要關心另一環的邏輯實作。
靜态工廠和執行個體工廠差別:靜态工廠指的是工廠的服務是靜态的,也就是工廠提供的方法是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>