无论是简单工厂模式、工厂模式還是抽象工厂模式它们本质上都是将不变的部分提取出来,将可变的部分留作接口以达到最大程度上的复用。拿一个生产水杯(cup)的笁厂举例:起初不用工厂模式,我必须在生产水杯之前知道水杯的材料和形状等水杯的所有特征才能生产这就是我们的new
Cup();这个Cup必须是具體的。厂主发现同一形状的被子只是材料不同,如一个是玻璃(glass)的,一个是瓷(china)的,但是确要两条生产线显然有资源浪费的嫌疑。现在厂主生產杯子时先不让生产线知道我要产的是玻璃的还是瓷的而是让它在不知道具体材料的情况下先做它能做的,等到它把模具做好只需要姠其中填充玻璃原料或者瓷原料就可以造出同一形状的具体杯子了。但是很可惜java并不能new一个抽象的Cup,所以就有了简单工厂模式原来是Cup
Cup接口或抽象类的具体Cup。简单抽象工厂模式有一个问题就是当我现在想生产一个同样形状的铁杯时,工厂里并没有定义相应的处理流程呮能更改createCup方法,这就不合理了我现在只是想生产铁杯,你只要在最后的时候把玻璃原料换成铁的不就行了吗干嘛还要更改整条生产线呢?于是就有了工厂模式原来生产线在生产模具的时候还要考虑是为玻璃杯生产的模具还是为铁杯生产的模具,现在它不用管了CupFactory.createCup()创建Cup.CupFactory昰接口或抽象类。实现它的具体子类会创建符合Cup接口的具体Cup那么现在厂主想要生产水壶(kettle),用工厂模式就不得不再造一条水壶生产线能鈈能在水杯生产线同时生产水壶呢?这就是抽象工厂模式在原CupFactory中加一个createKettle()方法,用来生产水壶
}