三、靜態工廠方法
public class AnimalFactory {
public static Animal getAnimal(String type) {
if ("dog".equals(type)) {
return new Dog();
} else {
return new Cat();
}
}
}
然後cat和dog
public class Cat extends Animal {
@Override
String getName() {
return "cat";
}
}
public class Dog extends Animal {
@Override
String getName() {
return "dog";
}
}
Helloservice裏面
public class HelloService {
private Student student;
private Animal animal;
public Animal getAnimal() {
return animal;
}
public void setAnimal(Animal animal) {
this.animal = animal;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String hello() {
return student.toString();
}
public String statitest() {
return animal.getName();
}
}
</bean>
<bean id="helloService" class="com.tx.ioc.xml.HelloService">
<property name="student" ref="student"/>
<property name="animal" ref="dog"/> //靜態方法這裏是重點要配置的
</bean>
<bean id="dog" class="com.tx.ioc.xml.AnimalFactory" factory-method="getAnimal">
<constructor-arg value="dog"/>
</bean>
<bean id="cat" class="com.tx.ioc.xml.AnimalFactory" factory-method="getAnimal">
<constructor-arg value="cat"/>
</bean>
測試:
/**
* 靜態構造方法測試
*/
@Test
public void testsaticbean(){
System.out.println("haha"+helloService.getAnimal());
System.out.println(helloService.statitest());
}
四、實例工廠方法:
去掉static
public class AnimalFactory {
public Animal getAnimal(String type) {
if ("dog".equals(type)) {
return new Dog();
} else {
return new Cat();
}
}
}
<bean name="animalFactory" class="com.tx.ioc.xml.AnimalFactory"></bean>
<bean id="cat" factory-bean="animalFactory" factory-method="getAnimal">
<constructor-arg value="cat"/>
</bean>
<bean id="dog" factory-bean="animalFactory" factory-method="getAnimal">
<constructor-arg value="dog"/>
</bean>