《大话设计模式》——简单工厂模式
简单工厂模式需要有三个组成角色:
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分支。这里的工厂类被称为万能工厂。