有没有办法在 C 中实现 Builder 设计模式?我想知道 Builder 是否有办法在结构中设置值,然后在 Builder 生成结构后让结构为只读。
我在网上查找了示例,但在 C 中找不到任何示例。谢谢。
有没有办法在 C 中实现 Builder 设计模式?我想知道 Builder 是否有办法在结构中设置值,然后在 Builder 生成结构后让结构为只读。
我在网上查找了示例,但在 C 中找不到任何示例。谢谢。
从维基百科页面:
...构建器模式的目的是找到伸缩构造器反模式的解决方案。当对象构造函数参数组合的增加导致构造函数的指数列表时,就会出现伸缩构造函数反模式。构建器模式不是使用大量的构造器,而是使用另一个对象,构建器,它逐步接收每个初始化参数,然后立即返回生成的构造对象。
因此,实现此目的的一种方法是定义一个具有接口的构建器对象,该接口允许您描述要构建的对象。然后,您提供另一种方法,允许您根据该描述构造目标对象。
使用维基百科页面中的汽车示例:
struct car;
struct car_builder;
enum CAR_OPTIONS { CAR_OPTION_NOT_AN_OPTION,
CAR_OPTION_SEATS, CAR_OPTION_NAVIGATION, /* ... */ };
struct car_builder * create_car_builder ();
/*
* Positive option sets the option, negative option unsets it.
* If the option takes a parameter, pass them in the varargs.
*/
void car_builder_option (struct car_builder *, int option, ...);
/*
* builds a car
*/
const struct car * car_builder_construct (struct car_builder *options);
/*
* junks the car
*/
void car_builder_destruct (const struct car *);
/* ... */
struct car_builder *options = create_car_builder();
car_builder_option(options, CAR_OPTION_SEATS, 2);
car_builder_option(options, CAR_OPTION_SPORT_CAR);
car_builder_option(options, CAR_OPTION_NAVIGATION);
car_builder_option(options, -CAR_OPTION_POWER_WINDOWS);
const struct car *car = car_builder_construct(options);
返回指向 a 的指针向const struct car
调用者表明返回的对象不能直接修改。
有没有办法在 C 中实现构建器设计模式?
当我寻找一种明显且安全的方法来初始化 struct members时,就出现了这个问题。
我问了一位有 C 经验(但也有 Python 仿射)的同事,希望没有什么有用的,或者可能是一个“聪明的把戏”,但是 -哇!- 我被告知是内置的 C99 功能[1],看看:[2]
#include <stdio.h>
struct X { int a, b, c; };
int main(void) {
struct X x = {.a=1, .b=2};
printf("x: %d %d %d\n", x.a, x.b, x.c);
x = (struct X){.a=1, .c=3};
printf("x: %d %d %d\n", x.a, x.b, x.c);
// initialize a const
// order can be changed when elements are named
const struct X cx = {.c=3, .b=2, .a=1};
printf("cx: %d %d %d\n", cx.a, cx.b, cx.c);
return 0;
}
PS好吧, const 可能是相对的:https ://ideone.com/dZMFzK