设计模式学习笔记(17)——生成器模式

版权声明:本文为博主原创,未经博主允许不得转载。 https://blog.csdn.net/weixin_36904568/article/details/90055558

1. 定义

将产品的内部结构(零件)与产品的生产过程分割开来,使一个建造过程可以按步骤构造出具有不同结构的产品。

  • 对象:产品
  • 对象的不同性质:产品的不同零件

2. 使用

  • 部分构造
    • 抽象构造者:定义抽象方法,规范产品对象的各个组成零件的建造,提供产品
    • 具体构造者:实现抽象方法,提供具体的产品
    • 具体产品类:具体构造的成果
  • 整体构造
    • 整体构建者:按照确定的步骤,根据不同的构造者构造产品
  • 客户:使用具体构造者,通过整体构建者建造产品

(1)部分构造

package BuildPattern;

/**
 * 抽象建造者
 */
public abstract class Builder {

    //建造步骤
    public void buildA(int param){

    }
    public void buildB(int param){

    }

    //返回产品
    public Product getProduct(){
         return null;
    }
}

package BuildPattern;

/**
 * 具体构造产品A
 */
public class BulderA extends Builder {

    private Product a = new Product();

    @Override
    public void buildA(int param) {
        a.setA(param);
    }

    @Override
    public Product getProduct() {
        return a;
    }
}

package BuildPattern;

/**
 * 具体构造产品B
 */
public class BuilderB extends Builder {
    private Product b = new Product();

    @Override
    public void buildB(int param) {
        b.setB(param);
    }

    @Override
    public Product getProduct() {
        return b;
    }
}

package BuildPattern;

/**
 * 具体产品
 */
public class Product {

    int a = 0;

    int b = 0;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    @Override
    public String toString() {
        return "Product{" +
                "a=" + a +
                ", b=" + b +
                '}';
    }
}

(2)整体构造

package Bui**加粗样式**ldPattern;

/**
 * 整体构建
 */
public class Director {

    private Builder builder;

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

    public void construct(int a,int b){
        builder.buildA(a);
        builder.buildB(b);
    }
}

(3)测试

package BuildPattern;

public class Test {
    public static void main(String[] args) {
        Builder builder = new BulderA();
        Director director = new Director(builder);
        director.construct(100,100);
        Product product = builder.getProduct();
        System.out.println(product);
    }
}

3. 特点

  • 封装对象的创建过程
  • 隐藏产品内部的结构:每一个内部成分本身可以是对象,也可以仅仅是产品对象的一个组成部分
  • 允许多个步骤创建对象:避免对象的属性相互依赖

猜你喜欢

转载自blog.csdn.net/weixin_36904568/article/details/90055558