设计模式(七)-- 建造者模式
layout: post
title: 设计模式(七)– 建造者模式
description: 设计模式(七)– 建造者模式
categories:
- 设计模式
tags: - 设计模式
面向对象
建造者模式
1.概述
建造者模式一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节
2.结构图
3.角色
Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。
ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。客户端一般只需要与指挥者进行交互,在客户端确定具体建造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。
4.C语言实现
#include <stdio.h>
#include <stdlib.h>
typedef struct _product {
int data1;
int data2;
int data3;
} Product;
typedef struct _builder {
Product* product;
void (*buildData1)(struct _builder*, int);
void (*buildData2)(struct _builder*, int);
void (*buildData3)(struct _builder*, int);
} Builder;
void buildData1(Builder* builder, int data) {
builder->product->data1 = data;
}
void buildData2(Builder* builder, int data) {
builder->product->data2 = data;
}
void buildData3(Builder* builder, int data) {
builder->product->data3 = data;
}
Builder* createBuilder() {
Builder* builder = (Builder*)malloc(sizeof(Builder));
builder->product = (Product*)malloc(sizeof(Product));
builder->buildData1 = buildData1;
builder->buildData2 = buildData2;
builder->buildData3 = buildData3;
return builder;
}
int main() {
Builder* builder = createBuilder();
builder->buildData1(builder, 1);
builder->buildData2(builder, 2);
builder->buildData3(builder, 3);
Product* product = builder->product;
printf("Product: data1=%d, data2=%d, data3=%d\n", product->data1, product->data2, product->data3);
free(builder->product);
free(builder);
return 0;
}
在上面的代码中,Product
结构体表示要构建的最终产品,其中包含了三个整型数据。Builder
结构体表示建造者,其中包含了三个方法,用于构建产品中的三个数据。在 main
函数中,通过调用这三个方法来构建产品,最后打印出产品中的数据。