工厂模式(Factory Design Pattern)
一般情况下,工厂模式分为三种更加细分的类型:简单工厂模式
、工厂方法模式
和 抽象工厂模式
。
(在 GoF 的《设计模式》一书中,它将简单工厂模式
看作是工厂方法模式
的一种特例)
当创建逻辑比较复杂,是一个“大工程”的时候,我们就考虑使用工厂模式,封装对象的创建过程,将对象的创建和使用相分离。
简单工厂(Simple Factory)
也叫作 静态工厂方法模式(Static Factory Method Pattern)
通过工厂类创建对象,并且根据入参决定具体子类对象。
一种是每次都返回新创建的对象;
另一种是预先创建各个对象, 使用时返回同一个对象(对于同一个参数)。
使用场景:
创建对象的逻辑比较简单。
工厂方法(Factory Method)
Head First的定义:
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
使用场景:
a. 当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类时,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。
b. 避免很多 if-else 分支逻辑时。(使用多态特性 优化简单工厂模式中的if判断)
比如: Glide的model加载 ModelLoaderFactory
抽象工厂(Abstract Factory)
Head First的定义:
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
使用场景:
工厂需要创建不止一个类对象的时候, 使用抽象工厂模式。
判断要不要使用工厂模式的最本质的参考标准。
- 封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。
- 代码复用:创建代码抽离到独立的工厂类之后可以复用。
- 隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。
- 控制复杂度:将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。
网友评论