美文网首页
建造者模式(Builder Pattern)

建造者模式(Builder Pattern)

作者: lxbnjupt | 来源:发表于2018-08-02 15:51 被阅读0次

    一、建造者模式简介

    1. 定义

    建造者模式(Builder Pattern)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,和单例模式以及工厂模式一样,建造者模式也属于创建型设计模式。建造者模式使用多个简单的对象一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

    2. 优点

    • 易于解耦,将产品本身与产品创建过程进行解耦,使得相同的创建过程可以创建不同的产品对象;
    • 易于精确控制对象的创建,将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰;
    • 易于扩展,针对新的需求实现一个新的建造者类即可,无需修改已经测试通过的代码。

    3. 缺点

    建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式。

    二、建造者模式实现

    1. 实现关键

    • 创建一个静态内部类Builder,并把所有外部类的参数复制到该类中;
    • 静态内部类Builder要具有一个public类型的构造函数,该构造函数以必要的属性值为参数;
    • 静态内部类Builder类具有赋值可选参数的方法,并且方法的返回值是该类本身;
    • 静态内部类Builder类须提供一个类似于build()的方法,返回一个外部类实例;
    • 外部类需要一个以Builder的实例对象为参数的私有构造函数,完成给外部类的属性变量赋值。

    2. 具体实现

    以组装一台电脑为例,需要的主要部件有中央处理器CPU,内存,硬盘,鼠标,键盘等等,就不一一列出了。在组装的时候,可以按照用户的配置需求来组装成其想要的电脑。

    public class Computer {
    
        private String CPU;
        private String Memory;
        private String HardDisk;
        private String Mouse;
        private String KeyBoard;
    
        /**
         * 私有构造函数
         * @param builder Builder的实例对象
         */
        private Computer(Builder builder) {
            this.CPU = builder.CPU;
            this.Memory = builder.Memory;
            this.HardDisk = builder.HardDisk;
            this.Mouse = builder.Mouse;
            this.KeyBoard = builder.KeyBoard;
        }
    
        public String toString() {
            return "CPU = " + CPU + ", Memory = " + Memory
                    + ", HardDisk = " + HardDisk + ", Mouse = " + Mouse + ", KeyBoard = " + KeyBoard;
        }
    
        /**
         * 静态内部类-建造者
         */
        public static class Builder {
            //复制外部类的参数
            private String CPU;
            private String Memory;
            private String HardDisk;
            private String Mouse;
            private String KeyBoard;
    
            /**
             * public类型的构造函数
             */
            public Builder() {
    
            }
    
            public Builder setCPU(String cpu) {
                this.CPU = cpu;
                return this;
            }
    
            public Builder setMemory(String memory) {
                this.Memory = memory;
                return this;
            }
    
            public Builder setHardDisk(String hardDisk) {
                this.HardDisk = hardDisk;
                return this;
            }
    
            public Builder setMouse(String mouse) {
                this.Mouse = mouse;
                return this;
            }
    
            public Builder setKeyBoard(String keyBoard) {
                this.KeyBoard = keyBoard;
                return this;
            }
    
            /**
             * build()的方法,返回一个外部类实例
             * @return Computer
             */
            public Computer build() {
                return new Computer(this);
            }
        }
    }
    

    建造者模式的使用也非常简单,获得一台按需配置的电脑大概可以像这样调用:

    private void buildComputer() {
            Computer computer = new Computer.Builder()
                    .setCPU("Intel Core i7")
                    .setMemory("16 GB")
                    .setHardDisk("512 GB")
                    .setMouse("Apple Mouse")
                    .setKeyBoard("Mechanical Keyboard")
                    .build();
    
            System.out.println(computer.toString());
        }
    

    输出结果:

    I/System.out: CPU = Intel Core i7, Memory = 16 GB, HardDisk = 512 GB, Mouse = Apple Mouse, KeyBoard = Mechanical Keyboard
    

    相关文章

      网友评论

          本文标题:建造者模式(Builder Pattern)

          本文链接:https://www.haomeiwen.com/subject/trfsvftx.html