设计模式 - 建造者模式

62 阅读1分钟
/**
 * @Author LWL
 * @Date 2022/8/21 14:11
 * @TODO 抽象建造类
 */
public abstract class AbstractBuild {

    protected TestModel3 testModel3 = new TestModel3();

    public abstract void builderMethod1();

    public abstract void builderMethod2();

    public abstract void builderMethod3();


    public TestModel3 build() {
        return testModel3;
    }
}
/**
 * @Author LWL
 * @Date 2022/8/21 14:14
 * @TODO 建造者 1
 */
public class CommonBuilder extends AbstractBuild {


    @Override
    public void builderMethod1() {
        System.out.println("=============== CommonBuilder执行1 ====================");
    }

    @Override
    public void builderMethod2() {
        System.out.println("=============== CommonBuilder执行2 ====================");
    }

    @Override
    public void builderMethod3() {
        System.out.println("=============== CommonBuilder执行3 ====================");
    }

}
/**
 * @Author LWL
 * @Date 2022/8/21 14:38
 * @TODO 建造者2
 */
public class CommonBuilder2 extends AbstractBuild {


    @Override
    public void builderMethod1() {
        System.out.println("=============== CommonBuilder2执行1 ====================");
    }

    @Override
    public void builderMethod2() {
        System.out.println("=============== CommonBuilder2执行2 ====================");
    }

    @Override
    public void builderMethod3() {
        System.out.println("=============== CommonBuilder2执行3 ====================");
    }
}
/**
 * @Author LWL
 * @Date 2022/8/20 13:38
 * @TODO 指挥者 定义制作流程
 */
public class Director {

    AbstractBuild abstractBuild = null;


    public Director(AbstractBuild abstractBuild) {
        this.abstractBuild = abstractBuild;
    }

    public void setAbstractBuild(AbstractBuild abstractBuild) {
        this.abstractBuild = abstractBuild;
    }

    public TestModel3 constructModel() {

        abstractBuild.builderMethod1();
        abstractBuild.builderMethod2();
        abstractBuild.builderMethod3();
        return abstractBuild.build();
    }
}
public static void main(String[] args) {

    // 实现
    CommonBuilder commonBuilder = new CommonBuilder();
    // 指挥者
    Director director = new Director(commonBuilder);
    // 返回对应产品
    TestModel3 model3 = director.constructModel();

    System.out.println(" ==================== 建造2 ========================");

    CommonBuilder2 commonBuilder2 = new CommonBuilder2();

    director.setAbstractBuild(commonBuilder2);

    director.constructModel();
}
@Data
public class TestModel4 {

    private String cpu;

    private String screen;

    private String memory;

    private String mainBoard;


    private TestModel4(Builder builder) {

        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainBoard = builder.mainBoard;
    }

    public static final class Builder {

        private String cpu;

        private String screen;

        private String memory;

        private String mainBoard;


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

        public Builder screen(String screen) {
            this.screen = screen;
            return this;
        }

        public Builder memory(String memory) {
            this.memory = memory;
            return this;
        }

        public Builder mainBoard(String mainBoard) {
            this.mainBoard = mainBoard;
            return this;
        }

        public TestModel4 build() {
            return new TestModel4(this);
        }

        @Override
        public String toString() {
            return "Builder{" +
                    "cpu='" + cpu + ''' +
                    ", screen='" + screen + ''' +
                    ", memory='" + memory + ''' +
                    ", mainBoard='" + mainBoard + ''' +
                    '}';
        }
    }
TestModel4 build = new TestModel4.Builder()
        .cpu("1")
        .memory("2")
        .screen("3")
        .mainBoard("4")
        .build();


-   使用注解 @Builder   -

TestModel4 build = TestModel4.builder()
                            .cpu("1")
                            .memory("2")
                            .screen("3")
                            .mainBoard("4")
                            .build();