5
有沒有一種方法可以在C中實現構建器設計模式?特別是,我想知道是否有一個通過Builder來設置結構中的值,但是在Builder生成結構之後,該結構是隻讀的。我在網上查找示例,但在C中找不到任何內容。謝謝。C中的構建器設計模式
有沒有一種方法可以在C中實現構建器設計模式?特別是,我想知道是否有一個通過Builder來設置結構中的值,但是在Builder生成結構之後,該結構是隻讀的。我在網上查找示例,但在C中找不到任何內容。謝謝。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);
返回一個指向const struct car
信號,該返回的對象不能直接修改的調用者。
'const struct foo * build_struct();',然後讓函數mallocate爲結構體分配內存。在外部世界可見時,它將在函數內部爲非''constst',而爲'const'。 – 2013-07-11 22:49:37
@ H2CO3:您應該將其作爲答案發布。 –