Java建造者模式实例分析

发布时间:2022-02-28 09:13:26 作者:iii
来源:亿速云 阅读:175

Java建造者模式实例分析

1. 引言

在软件开发中,设计模式是解决常见问题的经典解决方案。建造者模式(Builder Pattern)是一种创建型设计模式,它允许你分步骤创建复杂对象。与工厂模式不同,建造者模式更关注于对象的构建过程,而不是对象的实例化。本文将详细分析建造者模式的概念、结构、实现方式,并通过一个具体的Java实例来展示其应用。

2. 建造者模式概述

2.1 定义

建造者模式是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于创建具有多个组成部分的对象,尤其是在这些组成部分的创建过程较为复杂或需要分步骤进行时。

2.2 适用场景

2.3 优点

2.4 缺点

3. 建造者模式的结构

建造者模式通常包含以下几个角色:

  1. 产品(Product):表示被构建的复杂对象。
  2. 抽象建造者(Builder):定义了创建产品各个部分的抽象接口。
  3. 具体建造者(Concrete Builder):实现抽象建造者接口,具体实现各个部分的构建。
  4. 指挥者(Director):负责调用建造者的方法来构建产品。
  5. 客户端(Client):使用指挥者和建造者来创建产品。

3.1 类图

classDiagram
    class Product {
        +String partA
        +String partB
        +String partC
        +void setPartA(String partA)
        +void setPartB(String partB)
        +void setPartC(String partC)
        +void show()
    }

    class Builder {
        <<abstract>>
        +void buildPartA()
        +void buildPartB()
        +void buildPartC()
        +Product getResult()
    }

    class ConcreteBuilder {
        -Product product
        +void buildPartA()
        +void buildPartB()
        +void buildPartC()
        +Product getResult()
    }

    class Director {
        -Builder builder
        +void construct()
    }

    class Client {
        +void main(String[] args)
    }

    Product <-- ConcreteBuilder
    Builder <|-- ConcreteBuilder
    Director --> Builder
    Client --> Director
    Client --> ConcreteBuilder

4. Java实现建造者模式

4.1 产品类(Product)

首先,我们定义一个产品类Product,它包含多个部分(partApartBpartC),并提供了设置和展示这些部分的方法。

public class Product {
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    public void show() {
        System.out.println("Product Parts:");
        System.out.println("PartA: " + partA);
        System.out.println("PartB: " + partB);
        System.out.println("PartC: " + partC);
    }
}

4.2 抽象建造者类(Builder)

接下来,我们定义一个抽象建造者类Builder,它声明了构建产品各个部分的抽象方法,并提供了一个获取最终产品的方法。

public abstract class Builder {
    protected Product product = new Product();

    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();

    public Product getResult() {
        return product;
    }
}

4.3 具体建造者类(ConcreteBuilder)

然后,我们实现一个具体建造者类ConcreteBuilder,它继承自Builder,并具体实现了各个部分的构建方法。

public class ConcreteBuilder extends Builder {
    @Override
    public void buildPartA() {
        product.setPartA("PartA");
    }

    @Override
    public void buildPartB() {
        product.setPartB("PartB");
    }

    @Override
    public void buildPartC() {
        product.setPartC("PartC");
    }
}

4.4 指挥者类(Director)

指挥者类Director负责调用建造者的方法来构建产品。它提供了一个construct方法,用于控制产品的构建过程。

public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

4.5 客户端类(Client)

最后,我们编写一个客户端类Client,它使用指挥者和建造者来创建产品。

public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);

        director.construct();
        Product product = builder.getResult();
        product.show();
    }
}

4.6 运行结果

运行客户端代码后,输出如下:

Product Parts:
PartA: PartA
PartB: PartB
PartC: PartC

5. 建造者模式的变体

5.1 链式调用建造者模式

在实际开发中,我们经常使用链式调用的方式来简化建造者模式的使用。这种方式通过在建造者类中返回this来实现链式调用。

public class Product {
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    public void show() {
        System.out.println("Product Parts:");
        System.out.println("PartA: " + partA);
        System.out.println("PartB: " + partB);
        System.out.println("PartC: " + partC);
    }
}

public class Builder {
    protected Product product = new Product();

    public Builder buildPartA(String partA) {
        product.setPartA(partA);
        return this;
    }

    public Builder buildPartB(String partB) {
        product.setPartB(partB);
        return this;
    }

    public Builder buildPartC(String partC) {
        product.setPartC(partC);
        return this;
    }

    public Product getResult() {
        return product;
    }
}

public class Client {
    public static void main(String[] args) {
        Product product = new Builder()
                .buildPartA("PartA")
                .buildPartB("PartB")
                .buildPartC("PartC")
                .getResult();

        product.show();
    }
}

5.2 静态内部类建造者模式

在某些情况下,我们可以使用静态内部类来实现建造者模式,这样可以进一步简化代码结构。

public class Product {
    private String partA;
    private String partB;
    private String partC;

    private Product(Builder builder) {
        this.partA = builder.partA;
        this.partB = builder.partB;
        this.partC = builder.partC;
    }

    public void show() {
        System.out.println("Product Parts:");
        System.out.println("PartA: " + partA);
        System.out.println("PartB: " + partB);
        System.out.println("PartC: " + partC);
    }

    public static class Builder {
        private String partA;
        private String partB;
        private String partC;

        public Builder buildPartA(String partA) {
            this.partA = partA;
            return this;
        }

        public Builder buildPartB(String partB) {
            this.partB = partB;
            return this;
        }

        public Builder buildPartC(String partC) {
            this.partC = partC;
            return this;
        }

        public Product build() {
            return new Product(this);
        }
    }
}

public class Client {
    public static void main(String[] args) {
        Product product = new Product.Builder()
                .buildPartA("PartA")
                .buildPartB("PartB")
                .buildPartC("PartC")
                .build();

        product.show();
    }
}

6. 总结

建造者模式是一种非常有用的设计模式,特别适用于构建复杂对象的场景。通过将对象的构建过程与表示分离,建造者模式使得代码更加灵活、易于扩展。本文通过一个具体的Java实例详细分析了建造者模式的结构、实现方式及其变体,希望能够帮助读者更好地理解和应用这一设计模式。

推荐阅读:
  1. Java描述设计模式(06):建造者模式
  2. java怎么实现建造者模式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:怎么用C#商品管理系统简易版

下一篇:Vue标尺插件如何使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》