欢迎光临散文网 会员登陆 & 注册

Java设计模式之-建造者模式

2023-08-18 22:57 作者:bili_52912388700  | 我要投稿

什么是建造者模式

建造者模式(Builder Pattern)是一种对象构建设计模式,它可以将一个复杂对象的构建逻辑与其表示分离,使得同样的构建过程可以创建不同的表示。该模式是为了将构造复杂对象的过程和它的部件解耦。


主要解决什么问题

建造者模式主要解决了在软件系统中,有时存在着复杂对象的创建工作,其通常由多个部分的组装和步骤组成。与其他创建型模式相比,建造者模式更注重一步步创建复杂对象的过程。


在什么时候我们需要使用建造者模式

当我们需要创建的对象非常复杂,包含多个组成部分,并且对象的创建需要一系列的步骤时,我们通常会选择使用建造者模式。


生活中的应用实例

一个很好的例子是在吃快餐时,我们通常会选择一个套餐,这个套餐包含汉堡、薯条和饮料。尽管每个部分的制作过程可能有所不同,但是我们不必关心这些细节,只需要选择我们想要的套餐类型即可。


优点

客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。

每一个具体建造者都相对独立,可以很方便地替换或增加新的建造者,用户使用不同的具体建造者即可得到不同的产品对象。

缺点

建造者模式所创建的产品一般有较多的共同点,其组成部分相似,如果产品之间的差异性很大,例如不同的部件,建造者模式可能无法满足需求。

使用场景

建造者模式通常在以下场景中使用:


需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个部分。

需要生成的产品对象的属性相互依赖,建造者模式可以强制进行一步步的构造过程,不允许跳过必要的步骤。

代码举例

java

Copy

public class Burger {

    private String size;

    private boolean cheese;

    private boolean pepperoni;

    private boolean lettuce;

    private boolean tomato;


    public Burger(BurgerBuilder builder) {

        this.size = builder.size;

        this.cheese = builder.cheese;

        this.pepperoni = builder.pepperoni;

        this.lettuce = builder.lettuce;

        this.tomato = builder.tomato;

    }


    // getters and toString()...

}


public class BurgerBuilder {

    public String size;

    public boolean cheese = false;

    public boolean pepperoni = false;

    public boolean lettuce = false;

    public boolean tomato = false;


    public BurgerBuilder(String size) {

        this.size = size;

    }


    public BurgerBuilder addCheese() {

        this.cheese = true;

        return this;

    }


    public BurgerBuilder addPepperoni() {

        this.pepperoni = true;

        return this;

    }


    public BurgerBuilder addLettuce() {

        this.lettuce = true;

        return this;

    }


    public BurgerBuilder addTomato() {

        this.tomato = true;

        return this;

    }


    public Burger build() {

        return new Burger(this);

    }

}


public class Main {

    public static void main(String[] args) {

        Burger burger = new BurgerBuilder("Large")

                .addPepperoni()

                .addLettuce()

                .addTomato()

                .build();

        System.out.println(burger);

    }

}

在这个例子中,BurgerBuilder 就是一个建造者,它负责创建 `

Burger对象。通过链式调用方法,我们可以自由地添加我们想要的组件(例如,addPepperoni()、addLettuce()、addTomato()),然后调用 build() 方法就可以得到一个 Burger 对象。


这样做的好处是,我们可以控制 Burger 对象的创建过程,同时不暴露其内部的构建细节。此外,如果我们想要创建一个稍微不同的 Burger,只需要更改一下构建步骤即可。

Java设计模式之-建造者模式的评论 (共 条)

分享到微博请遵守国家法律