简单工厂模式需要有三个组成角色:
1、工厂类角色:负责生成具体产品类。
2、抽象产品角色:代表了具体产品的一个抽象类或是接口。
3、具体产品角色:最后生成的实例对象即是它。
我们以一个车辆选择的例子来作说明:
1、工厂类:此例中代表我们想要选择的车型,可以是“benz”和"audi"。
public class CarFactory {
//根据我们的输入参数,返回一个具体的产品类
public static Car createCar(String carname){
Car car = null;
switch (carname) {
case "benz":
car = new Benz();
break;
case "audi":
car = new Audi();
break;
default:
break;
}
return car;
}
}
2、抽象产品类:此例中代表了车的共同特性,例如可以开driver();
public interface Car {
void driver();
}
3、具体产品类:由工程模式生成的实体类。在这里有两个具体产品类,一个是Benz,一个是Audi。
public class Benz implements Car {
@Override
public void driver() {
System.out.println("driver Benz!");
}
}
public class Audi implements Car {
@Override
public void driver() {
System.out.println("driver Audi!");
}
}
客户端代码:在这里我们想要一台benz车,于是调用工厂类生成benz。如果我们想要一台audi车,可以输入参数audi即可。
public Main() {
Car car = CarFactory.createCar("benz");
car.driver();
}
简单工厂模式的缺点:
我们每添加一个实体类,就需要在工厂类中添加一个case分支。这里的工厂类被称为万能工厂。