• 设计模式-建造者模式


    设计模式-建造者模式

    什么是建造者设计模式?

    建造者模式是一种创建型设计模式,它允许你按照特定的步骤创建复杂对象。它将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

    建造者模式通常用于创建具有复杂结构的对象,例如需要多个步骤或多个部件来构建的对象。它将构建过程分解为一系列的步骤,每个步骤都有一个具体的建造者来完成。最终,所有的步骤都被组合在一起,形成一个完整的对象。

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

    1. 产品(Product):要创建的复杂对象,它由多个部件组成。
    2. 抽象建造者(Builder):定义了构建产品的抽象接口,包括各个部件的构建方法。
    3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责具体的构建过程。
    4. 指挥者(Director):负责控制建造过程的顺序和流程,以及返回最终构建的产品。

    通过使用建造者模式,可以将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。同时,它也使得构建过程更加灵活,可以根据需要动态地改变构建顺序或部件的组合方式。

    使用场景

    建造者模式适用于以下场景:

    1. 当需要创建复杂对象时,可以使用建造者模式。复杂对象通常由多个部件组成,每个部件都有自己的构建过程。通过使用建造者模式,可以将构建过程分解为多个步骤,每个步骤由一个具体的建造者来完成,最终将所有的部件组合在一起构建出复杂对象。
    2. 当需要创建的对象具有多个变种时,可以使用建造者模式。不同的具体建造者可以实现不同的构建过程,从而创建出不同的对象表示。通过使用建造者模式,可以动态地改变构建过程或部件的组合方式,从而创建出不同的对象。
    3. 当需要创建的对象的构建过程需要独立于其表示时,可以使用建造者模式。建造者模式将构建过程与表示分离,使得构建过程可以独立于具体的表示。这样一来,可以根据需要改变构建过程的顺序或部件的组合方式,而不影响最终的对象表示。

    总之,建造者模式适用于需要创建

    java示例

    是的,以下是一个使用Java实现的建造者模式的示例:

    // 产品类
    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: " + partA + ", " + partB + ", " + partC);
        }
    }
    
    // 抽象建造者
    interface Builder {
        void buildPartA();
        void buildPartB();
        void buildPartC();
        Product getResult();
    }
    
    // 具体建造者
    class ConcreteBuilder implements Builder {
        private Product product;
    
        public ConcreteBuilder() {
            this.product = new Product();
        }
    
        @Override
        public void buildPartA() {
            product.setPartA("Part A");
        }
    
        @Override
        public void buildPartB() {
            product.setPartB("Part B");
        }
    
        @Override
        public void buildPartC() {
            product.setPartC("Part C");
        }
    
        @Override
        public Product getResult() {
            return product;
        }
    }
    
    // 指挥者
    class Director {
        private Builder builder;
    
        public Director(Builder builder) {
            this.builder = builder;
        }
    
        public void construct() {
            builder.buildPartA();
            builder.buildPartB();
            builder.buildPartC();
        }
    }
    
    // 示例代码
    public class BuilderPatternExample {
        public static void main(String[] args) {
            Builder builder = new ConcreteBuilder();
            Director director = new Director(builder);
    
            director.construct();
    
            Product product = builder.getResult();
            product.show();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    在上述示例中,Product类表示要构建的复杂对象,Builder接口定义了构建产品的抽象方法,ConcreteBuilder实现了具体的构建过程,Director负责控制构建过程的顺序。在示例代码中,我们创建了一个具体建造者ConcreteBuilder,并将其传递给指挥者Director。指挥者根据需要调用具体建造者的方法来构建产品。最后,我们通过调用具体建造者的getResult方法获取构建完成的产品,并展示其部件。

  • 相关阅读:
    小公司的应用服务部署历程
    高效,可靠,安全的串口通讯开源方案
    CSS复合选择器(二)
    前端sql条件拼接js工具
    从「纯野妆」到「降温妆」,解析小红书“热词爆款学”
    ESP32-C3入门教程 环境篇⑦——ESP-IDF构建自定义组件模板(components/CMakeLists)
    C数据结构-堆的实现思路和堆排序的实现
    K8S Deployment 简介, 1个简单的Kubernetes Deployment YAML 文件
    Linux发布Spring Boot项目
    DOCKER安装RABBITMQ集群
  • 原文地址:https://blog.csdn.net/wangxinxinsj/article/details/133364222