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


    建造者模式(Builder Pattern)是一种创建型设计模式,它允许你按照步骤创建复杂对象。它将对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。通过使用建造者模式,你可以更加灵活地创建对象,同时还可以隐藏对象的创建细节。

    建造者模式通常由以下几个角色组成:

    1. 产品(Product):表示要创建的复杂对象。通常包含多个部分或属性。

    2. 抽象建造者(Builder):定义创建产品的抽象接口,包含创建产品各个部分的抽象方法。

    3. 具体建造者(Concrete Builder):实现抽象建造者接口,完成具体产品的构建过程。具体建造者通常包含一个产品实例,并负责将各个部分组装到产品中。

    4. 指挥者(Director):负责调用建造者的方法来构建产品。指挥者知道构建的具体顺序和步骤。

    下面是一个简单的示例,演示了如何使用建造者模式创建一个电脑对象:

    // 产品类
    class Computer {
        private String cpu;
        private String memory;
        private String storage;
        
        public void setCpu(String cpu) {
            this.cpu = cpu;
        }
        
        public void setMemory(String memory) {
            this.memory = memory;
        }
        
        public void setStorage(String storage) {
            this.storage = storage;
        }
        
        // 其他属性的getter和setter方法
        
        @Override
        public String toString() {
            return "Computer [cpu=" + cpu + ", memory=" + memory + ", storage=" + storage + "]";
        }
    }
    
    // 抽象建造者
    interface ComputerBuilder {
        void buildCpu();
        void buildMemory();
        void buildStorage();
        Computer getResult();
    }
    
    // 具体建造者
    class DesktopBuilder implements ComputerBuilder {
        private Computer computer;
        
        public DesktopBuilder() {
            this.computer = new Computer();
        }
        
        @Override
        public void buildCpu() {
            computer.setCpu("Intel Core i7");
        }
        
        @Override
        public void buildMemory() {
            computer.setMemory("16GB");
        }
        
        @Override
        public void buildStorage() {
            computer.setStorage("1TB HDD");
        }
        
        @Override
        public Computer getResult() {
            return computer;
        }
    }
    
    // 指挥者
    class Director {
        private ComputerBuilder computerBuilder;
        
        public Director(ComputerBuilder computerBuilder) {
            this.computerBuilder = computerBuilder;
        }
        
        public void constructComputer() {
            computerBuilder.buildCpu();
            computerBuilder.buildMemory();
            computerBuilder.buildStorage();
        }
    }
    
    // 使用示例
    public class BuilderPatternExample {
        public static void main(String[] args) {
            ComputerBuilder desktopBuilder = new DesktopBuilder();
            Director director = new Director(desktopBuilder);
            
            director.constructComputer();
            Computer computer = desktopBuilder.getResult();
            
            System.out.println(computer);
        }
    }
    
    • 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
    • 88
    • 89
    • 90

    在上面的示例中,我们定义了一个产品类Computer,它有三个属性:cpu、memory和storage。然后我们定义了一个抽象建造者接口ComputerBuilder,其中包含了创建产品各个部分的抽象方法。接下来,我们实现了具体建造者DesktopBuilder,它负责构建一个具体的Computer对象。最后,我们定义了一个指挥者Director,它知道具体建造者的构建顺序,并负责调用建造者的方法来构建产品。

    在主函数中,我们创建了一个具体建造者DesktopBuilder和一个指挥者Director,并将具体建造者传递给指挥者。然后,我们调用指挥者的constructComputer方法来构建产品。最后,我们通过具体建造者的getResult方法获取构建完成的产品,并输出结果。

  • 相关阅读:
    java毕业设计宠物交易平台Mybatis+系统+数据库+调试部署
    量化金融模型ARCH模型官方例程(中文翻译版)
    确定字符串是否是另一个的排列+压缩字符串+分发饼干
    web开发概述——Servelt技术
    35 岁失业了真的会很难找到工作吗?
    SQL Server、MySQL主从搭建,EF Core读写分离代码实现
    JS中数据类型
    Windows同时安装两个版本JDK,并实现动态切换JAVA8或者JAVA11
    Shell外壳的简易制作
    怎么查看证书里是不是包含私钥和公钥
  • 原文地址:https://blog.csdn.net/kkwyting/article/details/133670473