生成器模式

可分步骤创建复杂对象,使得可以使用相同的创建代码生成不同的对象。(将变化部分的代码放在生成器中)

适用场景

1.在可选参数较多时

示例问题:现在需要建造一栋房屋,可以是简单房屋,也可以是豪华的房屋。
如果是通过一个包括所有可能参数的超级构造函数来创建房屋对象,那么对于简单房屋而言,构造函数中绝大部分的参数都没有使用,会使得对于构造函数的调用十分不简洁。
在支持方法重载的编程语言中,可以新建几个只有较少参数的简化版构造函数,但这些函数仍需调用最复杂的构造函数,传递默认值来替代省略的参数。
这时可以通过使用生成器模式将对象构造代码从产品类中抽取出来,并将其放在一个名为生成器的独立对象中。 无需调用所有步骤,而只需调用创建特定对象配置所需的那些步骤即可。

2.在需要创建不同形式的产品时

可以创建多个不同的生成器, 用不同方式实现一组相同的创建步骤。(通过生成器隔离变化与不变的代码) 如下图:同一建造步骤,通过生成器使用不同的建造材料产生不同房子。

3.在对象组成部分不确定时

在某些情况下,一个对象的组成部分不是一开始就可以确定的,需要分步骤进行:一边解析一边创建。