建造者模式

你离开我真会死。 提交于 2020-03-24 10:37:41

3 月,跳不动了?>>>

    建造者模式(Builder Pattern)是将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建创建不同的表示,属于创建型模式。

建造者模式的设计有四个角色;
    1、产品:要创建的产品类对象
    2、建造者抽象:建造者的抽象类,规范产品对象的各个组成部分的构建,一般由子类实现具体的监造过程。
    3、建造者:具体的Builder类,根据不同的业务逻辑,具体化对象的各个组成部分的创建。
    4、调用者:调用具体的建造者,来创建对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

优点:
    1、封装性好,创建和使用分离
    2、扩展性好,建造类之间独立,一定程度上解耦。
缺点:
    1、产生多余的Builder对象,
    2、产品内部发生变化,建造者都要修改,成本较大。

应用场景:
    1、相同的方法、不同的执行顺序,产生不同的结果时。
    2、多个部件或零件,都可以装配到一个对象中,但是产生的结果又不相同。
    3、产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用。
    4、当初始化一个对象特别复杂,参数多,而且很多参数都具有默认值时。

代码示例:

@Data
public class BuilderEntiry {
    private String name;
    
    private Integer age;
    
    private List<String> names;
    
    public BuilderEntiry addName(String name){
        this.setName(name);
        return this;
    }
    
    public BuilderEntiry addAge(Integer age){
        this.setAge(age);
        return this;
    }
    
    public BuilderEntiry addNames(List<String> names){
        this.setNames(names);
        return this;
    }
    
    public BuilderEntiry builder(){
        return this;
    }
}

public class Test {
    public static void main(String [] args){
        String[] a={"123","123"};
        BuilderEntiry test = new BuilderEntiry().addName("test").addNames(Arrays.asList(a)).addAge(22).builder();
        System.out.println(test);
    }
}

输出:
BuilderEntiry(name=test, age=22, names=[123, 123])

建造者模式和工厂模式的区别:
    1、建造者模式更注重方法的调用顺序,工厂模式注重于创建对象。
    2、建造者创建复杂的对象都是由各种复杂的部件组成,工厂模式创建的都一样。
    3、注重点不一样:建造者不仅要把对象创建出来还要知道由那些部件组成,工厂模式只要把对象创建出来即可。
    4、建造者模式根据建造过程中的顺序不一样,最终对象部件组成也不一样。

源码案例:

StringBuilder

CacheBuilder

SqlSessionFactoryBuilder

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!