建造者模式(Builder Pattern)

2018-08-02  本文已影响0人  lxbnjupt

一、建造者模式简介

1. 定义

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

2. 优点

3. 缺点

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

二、建造者模式实现

1. 实现关键

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
上一篇下一篇

猜你喜欢

热点阅读