1.工厂模式(Simple Factory)
消费者并不需要知道工厂内部的实现,只需要指定产品类型,工厂便可以生产对应实例。
优点:解耦生产逻辑;拓展方便,增加产品无需改动其他产品。
举例:
1.分别有Circle,Retangle,Square三个产品,为了统一行为都继承Shape接口。
2.ShapeFactory是shape的工厂类。
3.Client(消费者) 指定类型,ShapeFactory生产出对应的实例。
2.工厂方法模式(FactoryMethod)
与工厂模式对比,工厂方法模式将类型匹配解耦放到ShapeFactory的实现类中,与上面的例子对比,每增加一个产品,只需要新建一个ShapeFactory产品实现类,而不需要去改动原有的代码(在工厂模式中,需要去改变产品类型适配的代码)
举例:
1.与上个例子对比,每个产品都有自己的工厂类,匹配产品的逻辑解耦放到ShapeFactory工厂类中。
2.每增加一个产品只需要新建多一个ShapeFactory的实现类。
3.抽象工厂类
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。
区别:
工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族。
例子:
1.有两种零件,Frame车架与Circle轮胎,分别适配两个汽车厂家,BYD与DZ。
2.DZFactory与BYDFactory工厂分别能产品轮轮胎与车架。
3.Client只需要创建工厂就能生产对应接口的汽车配件。
代码参考:https://github.com/biggirlo/study/tree/dev/src/main/java/com/biggirlo/design/factory