建造者模式
什么是建造者模式?
-
在mybatis处理mybatis-config.xml等映射配置文件时,会在内存中创建相应的配置对系对象,该过程使用了建造者模式
-
建造者模式(也被称为生成器模式)将一个复杂对象的构建过程与它的表示分离,从而使得同样的构建过程可以创建不同的表示。建造者模式将一个复杂对象的创建过程分成了一步步简单的步骤,用户只需要了解复杂对象的类型和内容,而无须关注复杂对象的具体构造过程,帮助用户屏蔽掉了复杂对象内部的具体构建细节。
-
建造者模式中的主要角色:
- 建造者(Builder)接口:Builder接口用于定义建造者构建产品对象的各部分行为
- 具体建造者(ConcreteBuilder)角色:在建造者模式中,直接创建产品对象的是具体建造者。具体建造者类必须实现建造者接口所要求的两类方法:一类是建造方法,例如图中的buildPart1()、buildPart2()等方法;另一类是获取构建好的产品对象的方法,例如图中的getProduct()方法
- 导演(Director)角色:该角色会通过调用具体建造者,创建需要的产品对象
- 产品(Product)角色:产品对象就是用户需要使用的复杂对象
建造者模式的优点
- 建造者模式中的导演并不需要知道产品类中的内部细节,它只需要提供需要的信息给建造者,由具体建造者处理这些信息(这个处理过程可能会比较复杂)并完成产品构造。这就使产品对象的上层代码与产品对象的创建过程解耦。
- 建造者模式将复杂产品的创建过程分散到了不同的构造步骤中,这样可以对产品创建过程实现更加精细的控制,也会使创建过程更加清晰。
- 每个具体建造者都可以创建出完整的产品对象,而且具体建造者之间是相互独立的,因此系统就可以通过不同的具体建造者,得到不同的产品对象。当有新产品出现时,无需修改于原有的代码,只需要添加新的具体建造者即可完成扩展,这符合“开放-封闭”原则
建造者模式的缺点
- 它所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式。
- 如果产品种类较多,且内部变化复杂,就需要定义多个具体建造者来实现这种变化,导致整个系统变得很复杂,不易于理解。