• 简谈设计模式之建造者模式


    建造者模式是一种创建型设计模式, 旨在将复杂对象的构建过程与其表示分离, 使同样的构建过程可以构建不同的表示. 建造者模式主要用于以下情况:

    1. 需要创建的对象非常复杂: 这个对象由多个部分组成, 且这些部分需要一步步地构建
    2. 不同的表示: 通过相同的构建过程可以生成不同的表示
    3. 构建过程的控制: 希望能够有更多的控制, 逐步创建对象, 而不是在一个步骤中完成

    建造者模式结构

    1. 抽象建造者: 定义了创建产品的各部件的抽象接口
    2. 具体建造者: 实现了建造者接口, 构建并装配各个部件, 最终生成具体的产品
    3. 产品: 具体要创建的复杂对象
    4. 指挥者: 负责安排已有模块的顺序构建一个复杂的对象

    建造者模式实现

    // 产品类
    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;
        }
        
        @Override
        public String toString() {
            return "Product [partA=" + partA + ", partB=" + partB + ",partC=" + partC + "]";
        }
    }
    
    // 抽象建造者
    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;
        }
    }
    
    // 具体建造者
    public class ConcreteBuilder extends Builder {
        @Override
        public void buildPartA() {
            product.setPartA("Part A");
        }
        
        @Override
        public void buildPartB() {
            product.setPartA("Part B");
        }
        
        @Override
        public void buildPartC() {
            product.setPartA("Part C");
        }
    }
    
    // 指挥者
    public class Director {
        private Builder builder;
        
        public Director(Builder builder) {
            this.builder = builder
        }
        
        public void construct() {
            builder.buildPartA();
            builder.buildPartB();
            builder.buildPartC();
        }
    }
    

    优点:

    • 易于拓展: 通过创建新的具体建造者, 可以很容易地增加新的产品表示
    • 细粒度控制: 可以一步步地构建对象, 细化对象的创建流程
    • 封装性: 将复杂对象的创建封装在建造者中, 客户端无需了解细节

    缺点:

    • 更多的代码量: 为了实现建造者模式, 需要更多的类和接口, 增加了代码量
    • 复杂性: 对于简单的对象创建, 建造者模式过于复杂了
  • 相关阅读:
    rar文件如何打开
    Hand Avatar: Free-Pose Hand Animation and Rendering from Monocular Video
    openlayers实现跨时间轨迹线(贝塞尔曲线)
    【Linux】Linux常用操作命令(四)
    vue3 传统 组件之间通信
    浅淡 C++ 与 C++ 入门
    Windows 11 有望支持苹果 M1 Mac?微软和高通的秘密协议即将到期
    jenkins的安装配置并集成jdk、git
    电装入股Coherent子公司SiC晶圆制造企业Silicon Carbide LLC
    洛谷P2351 吊灯
  • 原文地址:https://blog.csdn.net/qq_73142349/article/details/140336146