概念:
定义一个用于创建对象的接口,但是让其子类决定将哪个类实例化。工厂方法模式让一个类的实例化延迟到其子类。
案例:
当人们的生活水平日益提高,汽车成为人们的日益寻求的必需品。现在通过工厂方法的模式,让人们可以选购到自己需要的汽车。
类图:
代码实现:
car接口:
public interface Car {
public String brand();
}
BMWCar类:
public class BMWCar implements Car{
@Override
public String brand() {
return "开宝马汽车上班";
}
}
HondaCar类:
public class HondaCar implements Car{
@Override
public String brand() {
return "开本田汽车上班";
}
}
CarFactory类:
public interface CarFactory {
public String makeCar();
}
BMWCarFatory类:
public class BMWCarFactory implements CarFactory{
@Override
public String makeCar() {
return new BMWCar().brand();
}
}
HondaCarFactory类:
public class HondaCarFactory implements CarFactory{
@Override
public String makeCar() {
return new HondaCar().brand();
}
}
这里通过配置文件,和spring实现Client类:
beans.xml
Client类:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
//构造函数参数为配置文件名称
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
CarFactory carFactory=(CarFactory)applicationContext.getBean("bmwcarfactory");
System.out.println(carFactory.makeCar());
}
结果:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
//构造函数参数为配置文件名称
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
CarFactory carFactory=(CarFactory)applicationContext.getBean("hondacarfactory");
System.out.println(carFactory.makeCar());
}
结果: