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


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

    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();
        }
    }
    

    优点:

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

    缺点:

    • 更多的代码量: 为了实现建造者模式, 需要更多的类和接口, 增加了代码量
    • 复杂性: 对于简单的对象创建, 建造者模式过于复杂了
  • 相关阅读:
    session共享问题及四种解决方案-前端存储、session的复制 、session粘性、后端存储(Mysql、Redis等)
    04 光栅图形学算法-- 屏幕映射
    重学了计算机网络,略有小成,经验全部分享出来
    算法和数据及结构--稀疏数组
    Python 断言的使用
    node.js-连接准备
    Linux--基础IO(2)
    [Python] OSError: [E050] Can‘t find model ‘en_core_web_sm‘.
    隧道精确定位系统全方位保障隧道施工安全
    DJ9-3 DMA方式
  • 原文地址:https://blog.csdn.net/qq_73142349/article/details/140336146