定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用场景:
工厂类负责创建的对象较少。
客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。
优点:
封装性好,创建和使用分离。
拓展性好,建造类之间独立、一定程度上解耦。
缺点:
产生多余的builder对象。
产品内部发生变化,建造者都要修改,成本较大。
源码应用:
1)StringBuilder、mybatis里的CacheBuilder、SqlsessionFactoryBuilder、BeanDefinitionBuilder
2)java.sql包下的Connection管理数据库连接
与工厂模式区别:
1、建造者模式更加注重方法的调用顺序,工厂模式注重于创建对象
2、创建对象的力度不同,建造者模式创建复杂的对象,由各种复杂的部件组成,工厂模式创建出来的都一样
3、关注点:工厂模式只需要把对象创建出来就可以了,而建造者模式中不仅要创建出这个对象,还要知道这个对象由哪些部件组成
4、建造者模式根据建造过程中的顺序不一样,最终的对象部件组成也可能不一样