工厂方法模式(Factory Pattern)
属创建型设计模式,「定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类」
简单来说就是创建对象实例的过程不是用 new 的形式,而是定义一个创建方式(这个就是工厂类抽象层),具体创建类的过程由工厂子类实现,工厂类关心的是生产产品,产品也是一层抽象类,具体要生产什么产品,在生产的时候告诉工厂子类,工厂就生产出对应的产品。但虽说是不同产品,他们总的来说都有相同的功能定义,只是具体功能表现不同。
工厂方法模式.jpeg
抽象产品类定义的就是工厂要生产的东西,具体是什么产品由产品类的子类决定。工厂类也做了一层抽象是为了与具体工厂类解耦,如果实际情况不需要也是可以省略的,那省略了之后就叫「简单工厂模式」。如果实际生产情况比较复杂,需要多个工厂类生产不同产品,那就叫「多工厂模式」。
优缺点
-
良好的封装性,代码结构清晰
-
优秀的扩展性
-
屏蔽产品类,调用者不关心具体产品实现
适用场景
因为是 new 一个对象的替代方案,所以只要涉及创建对象的地方都可以用,但要考虑实际情况,免的画蛇添足。
工厂方法模式还能用于替代单例模式。
在 Android 中的使用
在「Android 进阶解密」一书中关于 ClassLoader 内容提到了工厂方法模式,在创建 PathClassLoader 对象的时候是由 PathClassLoaderFactory 创建的,而源码采用的就是工厂方法模式的简化板-简单工厂模式。
参考内容
「设计模式之禅(第 2 版)」
「Android 源码设计模式解析与实战」
网友评论