三:抽象工厂模式(Abstract Factory Pattern)
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂(很抽象,慢慢品味)
图解:(此处先画工厂后画产品,便于梳理层次)
讲解:(仅个人见解,可能不太正确,可以留言讨论)
抽象工厂模式其实就是工厂方法模式Plus,这里延申一块内容
传统工厂方法模式,每有一个新的产品加入,就需要创建一个新的抽象工厂,例:CarFactory,EngineFactory。
抽象工厂模式就是在传统工厂方法模式的前提下,按照产品族合并工厂。
举例:每个产品族都有相同数量的产品级(车、引擎)
此时抽象工厂CarFactory:getCar(),getEngine()。
反例:每个产品族具有不同数量的产品级(奥迪不生产引擎)
此时只能去新建一个只生产car的抽象工厂供AudiFactory实现。
总结:
当每个产品族(马自达、奔驰、奥迪)都有相同产品级时,只需要实现一个获取多个产品级的抽象工厂接口即可,无需创建新的抽象工厂。抽象工厂其实就是帮助减少系统的工厂数量的。
结尾:
看了很多篇工厂模式讲解,并没有看出工厂方法模式和抽象工厂模式有什么很大区别。个人认为抽象工厂就是工厂方法模式的特例化,在这种特例化的情况下,能避免大量的去创建工厂。