Builder Pattern(建造者模式)

1.builder.h

#include<iostream>
using namespace std;

class Builder {
    public:
        virtual void buildParta() {}
        virtual void buildPartb() {}
        virtual void buildPartc() {}
        virtual void buildPartd() {}
};
class ProductOne : public Builder {
public:
    void buildParta() {
        cout << "build part a of ProductOne" << endl;
    }
    void buildPartb() {
        cout << "build part b of ProductOne" << endl;
    }
    void buildPartc() {
        cout << "build part c of ProductOne" << endl;
    }
    void buildPartd() {
        cout << "build part d of ProductOne" << endl;
    }
};
class ProductTwo : public Builder {
public:
    void buildParta() {
        cout << "build part a of ProductTwo" << endl;
    }
    void buildPartb() {
        cout << "build part b of ProductTwo" << endl;
    }
    void buildPartc() {
        cout << "build part c of ProductTwo" << endl;
    }
    void buildPartd() {
        cout << "build part d of ProductTwo" << endl;
    }
};
class Director {
    private:
        Builder* m_Builder;
    public:
        Director(Builder* builder) {
            m_Builder = builder;
        }
        void create() {
            m_Builder->buildParta();
            m_Builder->buildPartb();
            m_Builder->buildPartc();
            m_Builder->buildPartd();
        }
};

2.main.cpp

#include"builder.h"
int main() {
    ProductOne product;
    Director director(&product);
    director.create();
    return 0;
}

3.定义

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程尅创建不同的表示.建造者模式是一种对象创建型模式.

4.结构

(1)Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法:一类是buildPartX(), 用于创建复杂对象的各个部件,另一类方法是getResult(), 用于返回复杂对象.
(2)ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构建和装配方法,定义并明确其所创建的复杂对象,也可以提供一个方法返回创建好的复杂对象.
(3)Product产品角色):它是被创建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义其装配过程.
(4)Director(指挥者):负责安排复杂对象的创建次序,指挥者和抽象建造者之间存在关联关系,可以在其construct()建造方法中调用创建者对象的部件构造和装配方法,完成复杂对象的建造.

注: 复杂对象指那些包含多个成员变量的对象,这些成员变量也称为部件或零件.

5.典型的复杂对象类

class Product {
private:
    string parta;
    string partb;
    string partc;
    string partd;
};

6.适用场景

(1)需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量
(2)需要生成的产品对象的属性相互依赖,需要指定其生成顺序
(3)对象的创建过程独立于创建该对象的类.在建造者模式中通过引入指挥者类,将创建过程封装在指挥者类中,而不再建造者类和客户类中.
(4)隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lombok是一个Java库,它提供了一些注解,可以简化Java代码的编写。其中之一就是建造者模式Builder pattern)。 使用Lombok的建造者模式可以方便地创建不可变对象,并且避免了手动编写大量的构造方法和setter方法。通过在类上添加`@Builder`注解,Lombok会自动生成一个内部静态类,该类包含了所有属性的setter方法,并且还提供了一个名为`build()`的方法用于构建对象。 下面是使用Lombok的建造者模式的一个简单示例: ```java import lombok.Builder; import lombok.Getter; @Builder @Getter public class Person { private final String name; private final int age; private final String address; } public class Main { public static void main(String[] args) { Person person = Person.builder() .name("John") .age(30) .address("123 Main St") .build(); System.out.println(person.getName()); // 输出:John System.out.println(person.getAge()); // 输出:30 System.out.println(person.getAddress()); // 输出:123 Main St } } ``` 在上面的示例中,我们使用`@Builder`注解在`Person`类上,然后通过调用自动生成的`builder()`方法来创建一个建造者对象。接着,我们可以使用链式调用来设置属性的值,并最后调用`build()`方法来构建不可变的`Person`对象。 需要注意的是,我们在`Person`类中的属性前添加了`final`关键字,这是为了确保对象的不可变性。此外,Lombok还会自动生成`equals()`、`hashCode()`和`toString()`等方法,以及一个私有的全参构造方法。 通过使用Lombok的建造者模式,我们可以简化代码并且提高可读性,特别是在创建拥有大量属性的对象时。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值