工厂模式

what:由工厂类来负责对象创建的工作,工厂模式包括简单工厂,工厂方法,抽象工厂。

抽象工厂是针对这种非常特殊的场景而诞生的。我们可以让一个工厂负责创建多个不同类型的对象(IRuleConfigParser、ISystemConfigParser 等),而不是只创建一种 parser 对象。这样就可以有效地减少工厂类的个数。

how:

将对象的创建,封装到方法或者类中。

第一种情况:类似规则配置解析的例子,代码中存在 if-else 分支判断,动态地根据不同的类型创建不同的对象。针对这种情况,我们就考虑使用工厂模式,将这一大坨 if-else 创建对象的代码抽离出来,放到工厂类中。

还有一种情况,尽管我们不需要根据不同的类型创建不同的对象,但是,单个对象本身的创建过程比较复杂,比如前面提到的要组合其他类对象,做各种初始化操作。在这种情况下,我们也可以考虑使用工厂模式,将对象的创建过程封装到工厂类中。

第一种情况,当每个对象的创建逻辑都比较简单的时候,我推荐使用简单工厂模式

第二种情况,因为单个对象本身的创建逻辑就比较复杂,所以,我建议使用工厂方法模式

why:

封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。

代码复用:创建代码抽离到独立的工厂类之后可以复用。

隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。

控制复杂度:将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容