建造者模式

建造者模式

建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以 将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方 法可以构造出不同表现(属性)的对象。

建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象 的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

  1. Product(产品角色): 一个具体的产品对象。
  2. Builder(抽象建造者): 创建一个Product对象的各个部件指定的 接口/抽象类。
  3. ConcreteBuilder(具体建造者): 实现接口,构建和装配各个部件。
  4. Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个 复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是: 负责控制产品对象的生产过程。
/**
 * 建造者抽象接口
 */
public interface Builder {
    void buildName1();
    void buildName2();
    void buildName3();
    void buildName4();

}


/**
 * 建造任务实际承担者
 */
public class ConcreteBuilder  implements Builder{
    @Override
    public void buildName1() {
        System.out.println("name1部分建造完成");
    }

    @Override
    public void buildName2() {
        System.out.println("name2部分建造完成");
    }

    @Override
    public void buildName3() {
        System.out.println("name3部分建造完成");
    }

    @Override
    public void buildName4() {
        System.out.println("name4部分建造完成");
    }
}

/**
 * 建造指挥者
 */
public class Director {

    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }


    public Product buildOK() {
        this.builder.buildName1();
        this.builder.buildName2();
        this.builder.buildName3();
        this.builder.buildName4();
        System.out.println("建造完成");
        return new Product();
    }
}

/**
 * 建造目标产品
 */
public class Product {

    private String name1;
    private String name2;
    private String name3;
    private String name4;

    public String getName1() {
        return name1;
    }

    public void setName1(String name1) {
        this.name1 = name1;
    }

    public String getName2() {
        return name2;
    }

    public void setName2(String name2) {
        this.name2 = name2;
    }

    public String getName3() {
        return name3;
    }

    public void setName3(String name3) {
        this.name3 = name3;
    }

    public String getName4() {
        return name4;
    }

    public void setName4(String name4) {
        this.name4 = name4;
    }
}

原文地址:https://www.cnblogs.com/huangshen/p/13300109.html