简单工厂、工厂模式和抽象工厂
工厂可以分为三种:简单工厂、工厂模式和抽象工厂,三者的关系是递进的,以做包子为例,刚开始只有两种包子:豆腐包和牛肉包,可以使用简单工厂(或者叫静态工厂)来解决,随着包子种类的越来越多,发现没添加一种包子,就需要改工厂类,扩展性太差,因此出现了工厂模式,提取一个公共的做包子接口,然后针对每一种包子建一个工厂类来专门生产这种包子,随后店面扩大,开始卖豆浆了,豆浆是不能在包子工厂里生产的,因此这时候就需要提取一个公共的既可以做包子又可以做豆浆的接口,然后每一个工厂去实现这个接口,这样每个工厂就都可以既生产包子又生产豆浆,只是种类不同,这就是抽象工厂。工厂方法和抽象工厂的最大区别在于工厂模式是用来创建同一个产品的不同类型的,但是抽象工厂模式是用来创建不同类的产品。 下面给出三种模式的类图和简单代码 1、简单工厂 类图 结构非常简单,定义一个包子接口,两个具体实现类,再有一个工厂负责根据名字生产不同的包子。可以看出,简单工厂扩展性非常差,例如我们要生产青菜包,则需要去修改工程类,违背了开闭原则。代码如下 package simpleFactory; public interface BaoZi { void method(); } package simpleFactory; public class DouFuBao implements BaoZi {