1. 程式人生 > 其它 >設計模式004-建造者模式

設計模式004-建造者模式

技術標籤:設計模式

建造者模式

package com.build;

public class BuildTest {

    public static void main(String[] args) {
        DefualtConcreteProductBuild defualtConcreteProductBuild = new DefualtConcreteProductBuild();
        Director director = new Director(defualtConcreteProductBuild);
        Product product = director.makeProduct("productA","CN","part1","part2","part3","part4");
        System.out.println(product);
    }
}


interface ProductBuild {
    void buildProductName(String productName);
    void buildCompanyName(String companyName);
    void buildPart1(String part1);
    void buildPart2(String part2);
    void buildPart3(String part3);
    void buildPart4(String part4);
    Product build();
}

class DefualtConcreteProductBuild implements ProductBuild {
    private String productName;
    private String companyName;
    private String part1;
    private String part2;
    private String part3;
    private String part4;

    @Override
    public void buildProductName(String productName) {
        this.productName = productName;
    }

    @Override
    public void buildCompanyName(String companyName) {
        this.companyName = companyName;
    }

    @Override
    public void buildPart1(String part1) {
        this.part1 = part1;
    }

    @Override
    public void buildPart2(String part2) {
        this.part2 = part2;
    }

    @Override
    public void buildPart3(String part3) {
        this.part3 = part3;
    }

    @Override
    public void buildPart4(String part4) {
        this.part4 = part4;
    }

    @Override
    public Product build() {
        return new Product(this.productName, this.companyName, this.part1, this.part2, this.part3, this.part4);
    }
}


class Director {
    private ProductBuild build;

    public Director(ProductBuild build){
        this.build=build;
    }

    public Product makeProduct(String productName, String companyName, String part1, String part2, String part3, String part4) {
        build.buildProductName(productName);
        build.buildCompanyName(companyName);
        build.buildPart1(part1);
        build.buildPart2(part2);
        build.buildPart3(part3);
        build.buildPart4(part4);
        return build.build();
    }


}

class Product {

    private String productName;
    private String companyName;
    private String part1;
    private String part2;
    private String part3;
    private String part4;

    public Product() {
    }

    public Product(String productName, String companyName, String part1, String part2, String part3, String part4) {
        this.productName = productName;
        this.companyName = companyName;
        this.part1 = part1;
        this.part2 = part2;
        this.part3 = part3;
        this.part4 = part4;
    }

    @Override
    public String toString() {
        return "Product{" +
                "productName='" + productName + '\'' +
                ", companyName='" + companyName + '\'' +
                ", part1='" + part1 + '\'' +
                ", part2='" + part2 + '\'' +
                ", part3='" + part3 + '\'' +
                ", part4='" + part4 + '\'' +
                '}';
    }
}

靜態內部類建造者模式

package com.build.v2;

public class BuildTest2 {
    public static void main(String[] args) {
       Product product = new Product.Builder().setProductName("productA").setCompanyName("cn").setPart1("part1").setPart2("part2")
                .setPart3("part3").setPart4("part4").build();
        System.out.println(product);
    }
}

class Product {

    private final String productName;
    private final String companyName;
    private final String part1;
    private final String part2;
    private final String part3;
    private final String part4;

    public Product(String productName, String companyName, String part1, String part2, String part3, String part4) {
        this.productName = productName;
        this.companyName = companyName;
        this.part1 = part1;
        this.part2 = part2;
        this.part3 = part3;
        this.part4 = part4;
    }

    static class Builder{
        private String productName;
        private String companyName;
        private String part1;
        private String part2;
        private String part3;
        private String part4;

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

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

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

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

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

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

        Product build() {
            return new Product(this.productName, this.companyName, this.part1, this.part2, this.part3, this.part4);
        }

    }

    @Override
    public String toString() {
        return "Product{" +
                "productName='" + productName + '\'' +
                ", companyName='" + companyName + '\'' +
                ", part1='" + part1 + '\'' +
                ", part2='" + part2 + '\'' +
                ", part3='" + part3 + '\'' +
                ", part4='" + part4 + '\'' +
                '}';
    }
}

應用

org.springframework.web.servlet.mvc.method.RequestMappingInfo;
org.springframework.beans.factory.support.BeanDefinitionBuilder;