意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
以下我们以一个汽车工厂为例子。
步骤 1
创建一个接口:汽车的接口
Car.java
public interface Car {
//汽车可以奔跑
void run();
}
步骤 2
创建实现接口的实体类,奔驰车,宝马车,现代车。
Benchi.java
public class Benchi implements Car {
@Override
public void run() {
System.out.println("Benchi is runing!");
}
}
Baoma.java
public class Baoma implements Car {
@Override
public void run() {
System.out.println("Baoma is runing");
}
}
XianDai.java
public class XiangDai implements Car {
@Override
public void run() {
System.out.println("XiangDai is runing");
}
}
步骤 3
创建一个汽车工厂,生成基于给定信息的实体类的对象。
CarFactory.java
public class CarFactory {
public Car createCar(String carType){
if(carType==null){
return null;
}else if(carType.equals("Benchi")){
return new Benchi();
}else if(carType.equals("Baoma")){
return new Baoma();
}else if(carType.equals("XiangDai")){
return new XiangDai();
}
return null;
}
}
步骤 4
去买车。
BuyCar.java
public class BuyCar {
//去汽车厂购买汽车
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
//购买宝马
Car car1 = carFactory.createCar("Baoma");
//宝马的run方法
car1.run();
//购买现代
Car car2 = carFactory.createCar("XiangDai");
//现代的方法
car2.run();
//购买奔驰
Car car3 = carFactory.createCar("Benchi");
//奔驰的方法
car3.run();
}
}
步骤 5
执行程序,输出结果:Baoma is runing
XiangDai is runing
Benchi is runing!