初见

建造者模式——创建型

2020-05-31  本文已影响0人  摘星马里奥

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

用户只需要指定需要建造的类型就可以得到它们,建造过程及细节不需要知道

类型:创建型

适用场景:

    如果一个对象有非常复杂的内部结构(很多属性)

    想把复杂对象的创建和使用分离

   

优点:

    封装性好,创建和使用分离

    扩展性好、建造类之间独立、一定程度上解耦

   

缺点:

    会产生多余的Builder对象

    产品内部发生变化,建造者都要修改,成本较大

   

建造者模式与工厂模式:

    注重点不同:

        建造者模式更注重于方法的调用顺序

        工厂模式注重于产品

    创建对象的粒度不同:

        建造者模式可以创建一些复杂的产品,由各种复杂的部件组成

        工厂模式创建出来的都是一个样子

    关注点不同:

        工厂模式只要把对象创建出来即可

        建造者模式不单只要创建出产品,还要知道这个产品都是由那些部件组成的,而且在某些业务场景下,比如说一定的顺序决定了产出的产品不一样的话,那么这里也要对顺序进行调整,工厂则不关心顺序。

       

coding的UML图V1版:

V2版(链式调用):

Course course = new Course.CourseBuilder.buildCourseName("").buildCoursePPT("").build();

示例:

JDK中

例子一:java.lang.StringBuilder的append()方法

        java.lang.StringBuffer的append()方法(不过是加了synchronized同步的关键字)

       

开源框架中:

例子二:guava中,Immutable不可变这些数据结构的使用方法

Set<String> set = ImmuatbleSet.<String>builder().add("a").add("b").build();

例子三:TokenCache

        guava中的CacheBuilder这个类,典型的建造者模式

例子四:Spring中的BeanDefinitionBuilder

例子五:Mybatis中的SqlSessionFactoryBuilder的build方法中,

        XMLConfigBuilder的parse方法,parse方法又调用了parseConfiguration

       

        典型的:建造者包装一层建造者

上一篇下一篇

猜你喜欢

热点阅读