Có cách nào để triển khai mẫu thiết kế trình xây dựng trong C không? Đặc biệt, tôi tự hỏi nếu có một để đặt giá trị trong một cấu trúc thông qua một Builder, nhưng sau đó có cấu trúc được chỉ đọc sau khi cấu trúc được sản xuất bởi Builder. Tôi đã tìm kiếm các ví dụ trực tuyến nhưng không thể tìm thấy bất kỳ ví dụ nào trong C. Cảm ơn bạn.mẫu thiết kế trình xây dựng trong C
Trả lời
Từ wikipedia page:
... mục đích của mô hình xây dựng là để tìm một giải pháp cho các nhà xây dựng lồng chống mẫu. Mô hình chống tạo mô hình lồng ghép xảy ra khi sự gia tăng của sự kết hợp tham số hàm tạo đối tượng dẫn đến một danh sách hàm mũ của các hàm tạo. Thay vì sử dụng nhiều hàm tạo, mô hình trình xây dựng sử dụng một đối tượng khác, một trình tạo, nhận từng tham số khởi tạo theo từng bước và sau đó trả về đối tượng đã tạo kết quả cùng một lúc.
Vì vậy, một cách để đạt được điều này là xác định đối tượng trình xây dựng với giao diện cho phép bạn mô tả đối tượng bạn muốn tạo. Sau đó, bạn cung cấp một phương thức khác cho phép bạn xây dựng đối tượng đích dựa trên mô tả đó.
Sử dụng ví dụ xe trong trang wikipedia:
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);
Trả về một con trỏ đến một const struct car
tín hiệu cho người gọi rằng đối tượng quay trở lại không thể chỉnh sửa trực tiếp.
- 1. Một mẫu thiết kế cho các nhà xây dựng
- 2. Mẫu thiết kế để viết lại Crenshaw là "hãy xây dựng trình biên dịch"?
- 3. Tôi có thể sử dụng mẫu thiết kế trình xây dựng cùng với hibernate không?
- 4. Netbeans 7/7.1 javafx Thiết kế GUI/người xây dựng
- 5. Mẫu thiết kế quan sát trong C++
- 6. Thiết kế xây dựng lớp không thể thay đổi
- 7. Mẫu thiết kế F #
- 8. Thiết kế biên dịch và lớp xây dựng
- 9. Thiết kế mẫu trong Rails
- 10. Mẫu thiết kế để xây dựng một dịch vụ web PHP phức tạp hợp lý
- 11. Mô hình trình xây dựng có thừa kế
- 12. Trình thiết kế biểu mẫu Visual Studio
- 13. Mẫu thiết kế ngoại lệ C++
- 14. Mẫu thiết kế nào?
- 15. Thiết kế C++ OO: Thừa kế tham số mẫu
- 16. D Quá trình xây dựng
- 17. C++ 11 mẫu thiết kế bộ nhớ hồ bơi?
- 18. Mẫu thiết kế - Mẫu chiến lược
- 19. Đi mẫu: để xây dựng
- 20. nhà xây dựng và Thừa kế
- 21. Tham chiếu đến các Mẫu Thiết kế trong ANSI C?
- 22. Mẫu thiết kế memcache PHP
- 23. Mẫu thiết kế SQL
- 24. Mẫu thiết kế Android
- 25. Ngoài các mẫu thiết kế?
- 26. Mẫu thiết kế dự án Euler
- 27. Mẫu thiết kế để tạo URL API
- 28. Mẫu thiết kế "Mặt tiền"
- 29. Thứ tự xây dựng trong kế thừa ảo
- 30. Lỗi khi mở trình thiết kế trên biểu mẫu được kế thừa
'const struct foo * build_struct();', sau đó để bộ nhớ mallocate chức năng cho cấu trúc. Nó sẽ không phải là 'const' bên trong hàm nhưng 'const' khi hiển thị với thế giới bên ngoài. –
@ H2CO3: Bạn nên đăng câu trả lời đó. –