一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
导引目录
前言
通过前面对23种设计模式中创建型类型的学习,我们不难发现创建型的模式中无论是工厂模式的统一实例化,还是建造者的组合实例化等等,它们都是在对类的实例化过程进行抽象,将对象的创建和使用进行有效的抽离,使得系统的职能分化清晰,尽可能的使我们的软件结构清晰,软件系统易于扩展。
工厂模式
严格意义上来说简单工厂是不属于我们的23种设计模式当中,我个人认为他算是一种编码技巧,但是简单工厂和工厂方法在平常的开发过程中相对要高一些。
-
如果对象的创建不复杂我们可以直接采用实例化的方式,不用考虑工厂模式。
-
如果对象的创建比较复杂,这时候我们才会考虑工厂模式
-
如果每个对象的创建过程都非常简单,我们考虑使用简单工厂即可,把所有的对象的实例化都放到一个工厂里面。
-
如果每个对象的创建比较复杂,我们就考虑使用工厂方法,将所有的对象的实例化都放到各自的工厂去实现。
- 如果每个对象的创建还存在多个维度,我们就要考虑抽象工厂,将不同维度的产品放到一类工厂进行实现。
-
作用 :
- 工厂封装了可能变化的创建逻辑,且创建逻辑的变更对调用者透明的。
- 当对象复杂的创建逻辑被封装后,调用者无需了解如何创建对象。
- 创建代码抽离到独立的工厂类之后可以复用。
- 将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。
建造者
一般情况我们创建比较复杂的对象,并且该对象的形态会有多种,这时候我们都会优先考虑建造者模式。建造者的原理和实现都比较简单,主要还是它的应用场景。
- 需要构建的对象比较复杂,成员属性比较多。
- 需要构建的对象表现形态比较多,使用构造方法实现过于冗余,且参数列表又长又臭,影响代码可读性。
- 我们希望对象在创建之后外部不可以进行直接的修改操作
单例模式
单例模式是业务开发中使用比较频繁的一种设计模式,用来创建全局唯一的对象。一个类只允许有一个实例对象,对于Android开发来说需要特别注意多进程情况下单例的处理。分别有多种实现方式,比较推荐的实现方式是双重检测和静态内部类。但是并不推荐使用,主要的理由有以下几点:
- 单例在面向对象方面不友好
- 单例对代码的扩展性不友好
- 单例会隐藏类之间的依赖关系
- 单例不支持有参数的构造函数
原型模式
一般在开发过程当中原型模式使用频率也是比较低的一种,只有当对象的创建成本比较大时,而同一个类的不同对象之间差别不大,也就时说基本成员属性都比较相同,在这种情况下,我们可以利用对已有对象进行拷贝的方式,来创建新对象。作用就是节省创建时间。
小结
创建型设计模式本质上对象的创建,这些模式之间有时是并列关系,原型会工厂更适合应用;有时是合作关系,单例和建造者可以一起构建,所以掌握它们各自的特性,根据具体的软件场景来确定合适的模式。