Java 杂谈

设计模式之建造者(Builder)

2018-07-27  本文已影响4人  ikonan

介绍

建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。

使用场景

UML类图

建造者(Builder)模式类图

角色介绍

Builder模式简单实现

Builder模式最典型的例子,就是组装电脑的例子了

创建产品类

public class Computer {

    private String cpu;
    private String ram;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getRam() {
        return ram;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }
}

创建Builder类: 组装电脑有一套组装方法的模版,就是一个抽象的Builder类,里面提供了安装CPU、内存的方法,以及组装成电脑的create方法

public interface Builder {

    public void buildCpu(String cpu);
    public void buildRam(String ram);

    public Computer create();
}

实现了抽象的Builder类,ComputerBuilder类用于组装电脑:

public class ComputerBuilder implements Builder{
    private Computer computer = new Computer();

    @Override
    public void buildCpu(String cpu) {
        computer.setCpu(cpu);
    }

    @Override
    public void buildRam(String ram) {
        computer.setRam(ram);
    }

    @Override
    public Computer create() {
        return computer;
    }
}

客户端调用指挥者类
最后商家用指挥者类组装电脑。我们只需要提供我们想要的CPU,内存就可以了,至于商家怎样组装的电脑我们无需知道。

public class Client {

    public static void main(String[] args) {

        Builder builder = new ComputerBuilder();
        Director director = new Director(builder);

        //组装电脑
        Computer computer = director.createComputer("i5-3210","DDR4");
        System.out.println(">>>>cpu:"+computer.getCpu()+
                              " ram:"+computer.getRam());
    }
}

运行结果:
>>>>cpu:i5-3210 ram:DDR4

Builder模式变种(常用)

通过静态内部类等方式实现的零件无序话构造:


public class Computer {

    private String cpu;
    private String ram;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getRam() {
        return ram;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }

    public static class Builder {
        private Computer computer = new Computer();

        public Builder setCpu(String cpu) {
            computer.setCpu(cpu);
            return this;
        }

        public Builder setRam(String ram) {
            computer.setRam(ram);
            return this;
        }

        public Computer create() {
            return computer;
        }
    }
}

客户端调用

public class Client {

    public static void main(String[] args) {

        Computer.Builder builder = new Computer.Builder();
        Computer computer = builder.setCpu("i5-3210")
                .setRam("DDR4").create();

        System.out.println(">>>>cpu:"+computer.getCpu()+
                              " ram:"+computer.getRam());
    }
}

运行结果:
>>>>cpu:i5-3210 ram:DDR4

总结

上一篇 下一篇

猜你喜欢

热点阅读