1、远古时代:自给自足。消费者自己生产一款宝马车,然后自己用。
2、工业时代:消费者需要的产品由工厂生产(简单工厂模式)。消费者不用自己生产宝马车,由工厂来生产,提供给消费者。
1)产品类:
public abstract class BMW {
}
public class BMW320 extends BMW{
public BMW320() {
System.out.println("制造-->BMW320");
}
}
public class BMW523 extends BMW {
public BMW523() {
System.out.println("制造-->BMW523");
}
}
2)工厂类:
public class Factory {
public static BMW createBMW(int type) {
BMW bmw = null;
switch (type) {
case 320:
bmw = new BMW320();
break;
case 523:
bmw = new BMW523();
break;
default:
break;
}
return bmw;
}
}
消费者:
public class Customer {
public static void main(String[] args) {
BMW bmw320 = Factory.createBMW(320);
BMW bmw523 = Factory.createBMW(523);
System.out.println(bmw320);
System.out.println(bmw523);
}
}
此模式的成员:
1) 抽象产品类:抽象类或者接口。
2) 具体产品类:工厂要生产的具体产品。
3) 工厂类:用来创建具体产品。
从开闭原则(对扩展开放;对修改关闭)来分析简单工厂模式。当消费者想要一种新型车,需要扩展产品类,修改工厂类。对于产品类,是符合开闭原则的;对于工厂类,是违背开闭原则的。
工厂方法可以解决这个问题,定义一个抽象工厂,每新增一个具体产品,就增加一个对应的具体工厂,这样工厂类也可以扩展了。