创建型-建造者模式(builder)

1,简介

  建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的角色

  1. Builder:为创建一个产品对象的各个部件指定抽象接口。
  2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
  3. Director:构造一个使用Builder接口的对象。
  4. Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

2,demo

1)抽象建造类:Builder

package com.demo.base.design_partten.builder;

/**
 * @author gx
 * 为创建产品对象的各个部件的指定抽象接口
 */
public interface Builder {
    void buildHead();
    void buildBody();
    void buildFoot();
    Product buildPerson();
}

2)具体的建造类

package com.demo.base.design_partten.builder;

/**
 * 具体的建造工具
 * @author gx
 */
public class ConcreteBuilder implements Builder {

    Product product;
    public ConcreteBuilder(){
        product = new Product();
    }

    @Override
    public void buildHead() {
        product.setHead("建造头部");
    }

    @Override
    public void buildBody() {
        product.setBody("建造身体");
    }

    @Override
    public void buildFoot() {
        product.setFoot("建造脚步");
    }

    @Override
    public Product buildPerson() {
        return product;
    }
}

3)复杂的产品类

package com.demo.base.design_partten.builder;

/**
 * @author gx
 * 表示被构造的复杂对象
 */
public class Product {
    private String head;
    private String body;
    private String foot;

    public String getBody() {
        return body;
    }
    public String getFoot() {
        return foot;
    }
    public String getHead() {
        return head;
    }

    public void setBody(String body) {
        this.body = body;
    }
    public void setFoot(String foot) {
        this.foot = foot;
    }
    public void setHead(String head) {
        this.head = head;
    }

    @Override
    public String toString() {
        return "Product{" +
                "head='" + head + '\'' +
                ", body='" + body + '\'' +
                ", foot='" + foot + '\'' +
                '}';
    }
}

4)使用 Builder 工具的类

package com.demo.base.design_partten.builder;

/**
 * @author gx
 * 构造一个使用 Builder 接口的对象
 */
public class Director {
    public Product constructProduct(Builder pb){
        pb.buildHead();
        pb.buildBody();
        pb.buildFoot();
        return pb.buildPerson();
    }
}

5)业务类

public class MainTest {
    public static void main(String[] args) {
        Director director = new Director();
        Product product = director.constructProduct(new ConcreteBuilder());
        System.out.println(product);
    }
}

3, 使用链式编程

  1. 产品类
package com.demo.base.design_partten.builder.chain;
/**
 * @author gx
 * 表示一个复杂的产品
 * */
public class Car {
    private String name;
    private double price;
    private String color;
    private String sell;

    public static Car instance(){
        return new Car();
    }

    public Car createName(String name){
        this.setName(name);
        return this;
    }

    public Car createPrice(double price){
        this.setPrice(price);
        return this;
    }

    public Car createColor(String color){
        this.setColor(color);
        return this;
    }

    public Car createSell(String sell){
        this.setSell(sell);
        return this;
    }

    public double getPrice() {
        return price;
    }
    public String getName() {
        return name;
    }
    public String getColor() {
        return color;
    }
    public String getSell() {
        return sell;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public void setSell(String sell) {
        this.sell = sell;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                ", sell='" + sell + '\'' +
                '}';
    }
}

  1. 业务类
package com.demo.base.design_partten.builder.chain;

/**
 * @author gx
 */
public class Test {
    public static void main(String[] args) {
        Car car = Car.instance().createSell("100").createColor("red").createName("特斯拉").createPrice(120.3);
        System.out.println(car);
    }
}

4. 使用场景

  1. Mybatis 缓存的创建,CacheBuilder 类来创建 Cache。
posted @ 2024-05-11 11:12  primaryC  阅读(5)  评论(0编辑  收藏  举报