Tôi khá mới để phát triển và thiết kế C++ và vì vậy tôi xin lỗi trước trong câu hỏi của tôi là mơ hồ hoặc kém cấu trúc. Tôi có một số phân cấp riêng biệt và không liên quan trong mã của tôi và tôi muốn sử dụng một nhà máy chung như mô tả và được thực hiện bởi Alexandrescu để nhanh chóng các đối tượng từ các hệ thống phân cấp này.
Phần tôi gặp khó khăn với giai đoạn khởi tạo. Các lớp có nhu cầu khởi tạo rất khác nhau. Đôi khi dữ liệu cần thiết để khởi tạo có thể được tra cứu từ lưu trữ (DB) và trong những trường hợp đó tôi có thể đóng gói thủ tục khởi tạo trong một số phương thức Init() của lớp cụ thể. Nhưng vào những thời điểm khác, dữ liệu chỉ được biết đến tại địa phương một khoảnh khắc của sự khởi tạo và cần phải được truyền cho đối tượng một cách thủ công. Tôi đang đấu tranh để tìm ra cách thống nhất để làm điều này. Có ai có bất kỳ yếu tố đầu vào nào trong việc tiếp cận các vấn đề thuộc loại này không? Cảm ơnKhởi tạo đối tượng và các nhà máy đối tượng trong C++
Trả lời
Bạn đang đập xuống đường cao tốc Over-Engineering ... trước tiên.
Nhà máy hiếm khi được yêu cầu và không có hai Nhà máy nào giống nhau (như bạn thấy).
Thật vô dụng khi thử và cung cấp một lớp cơ sở cho tất cả các Nhà máy của bạn, bởi vì lớp cơ sở này sẽ không có ngữ nghĩa rõ ràng. Nó xây dựng cái gì? Bird
s? Car
s? Chúng không liên quan ... Object
s? Đây không phải là Java!
Nếu bạn muốn sử dụng Nhà máy (vì lý do nào đó), thì Factory
sẽ tạo ra các loại đối tượng, tất cả bắt nguồn từ một lớp cơ sở chung. Nếu bạn có nhiều loại đối tượng, thì bạn sẽ cần một số loại Nhà máy.
Và nếu bạn tìm thấy mã Nhà máy lặp đi lặp lại, hãy sử dụng mẫu để treo mã chung.
Nếu tôi đoán chính xác, vấn đề của bạn là bạn không biết cách chuyển các bộ đối số khác nhau cho các phương pháp nhà máy của mình. Nếu đúng như vậy, tôi có thể khuyên bạn nên tạo thêm một hệ thống phân cấp/Hãy gọi nó là FactoryHelper. Lớp bê tông của hệ thống phân cấp này sẽ chứa dữ liệu spesific cho việc xây dựng các lớp cụ thể của bạn, ví dụ FactoryHelperA cho ConcreteProductA sẽ chứa một chuỗi và FactoryHelperB cho ProductB sẽ chứa int. Một phương thức abstact của nhà máy của bạn phải chấp nhận lớp cơ sở trừu tượng - FactoryHelper như một đối số. Các phương pháp bê tông của nhà máy của bạn sẽ đưa đối số này vào FactoryHelperA hoặc FactoryHelperB cụ thể và lấy dữ liệu specefic cho instanciation specefic Product
Nhưng nó không phải là thiết kế rất tốt. Tôi đoán bạn đang cố gắng sử dụng phương pháp nhà máy một cách sai lầm.
- 1. khởi tạo các đối tượng trong C++
- 2. Đối tượng nhà máy và chức năng của nhà máy
- 3. Tùy chọn khởi tạo đối tượng C#
- 4. C++ khởi tạo đối tượng và ngữ nghĩa hàm tạo
- 5. Có thể sử dụng bộ khởi tạo đối tượng C# với phương thức nhà máy không?
- 6. Tạo C++ đối tượng
- 7. Tạo và tạo đối tượng C++
- 8. Lớp Nhà máy - Lưu đối tượng
- 9. Nhà máy biết loại đối tượng nào cần tạo?
- 10. Phương pháp Nhà máy VS Đối tượng Nhà máy
- 11. Tạo đối tượng: Constructors hoặc phương thức nhà máy tĩnh
- 12. Tạo các đối tượng trong Loop C#
- 13. DRY'er Khởi tạo đối tượng trong Ruby
- 14. Tạo đối tượng sau khi khởi tạo với ninject
- 15. Khởi tạo danh sách các đối tượng trong Python
- 16. Cú pháp khởi tạo đối tượng
- 17. Java: chuỗi khởi tạo của đối tượng
- 18. lớp khởi tạo từ đối tượng lớp
- 19. Inheritance: đối tượng tạo
- 20. Bạn có thể khởi tạo một đối tượng đối tượng từ JSON trong .NET không?
- 21. Truy cập đối tượng khởi tạo XAML từ C#
- 22. Javascript - trình khởi tạo đối tượng?
- 23. Khởi tạo đối tượng chung từ System.Type
- 24. Khởi tạo đối tượng singleton bằng Class.forName()?
- 25. bộ khởi tạo đối tượng biến đổi?
- 26. Khởi tạo một đối tượng mới từ lớp trong Enum
- 27. Tạo đối tượng trong câu hỏi C#
- 28. Tạo một đối tượng trong C# từ F # đối tượng với đối số tùy chọn
- 29. Mở rộng nhà máy đối tượng tùy chỉnh cho Unity
- 30. Làm thế nào để khởi tạo đối tượng xảy ra khi deserializing các đối tượng nhị phân trong Flex?
Alexandrescu cũng là người hâm mộ các chính sách, vì vậy bạn có thể có chính sách phân bổ cho nhà máy của mình. Tuy nhiên, nếu nhu cầu phân bổ cụ thể phụ thuộc vào dữ liệu thời gian chạy, thì tôi đoán bạn không thể có được xung quanh một cấp phát chuyển đổi thời gian chạy. Có thể đăng ký một bộ sưu tập của callbacks phân bổ ... –
chỉ đơn giản là không sử dụng các nhà máy (để tránh những vấn đề này). các nhà máy có thể giải quyết một số vấn đề nhưng chúng hiếm khi thực sự cần thiết –
Cảm ơn bạn đã trả lời. Bạn có thể giải thích những gì bạn có nghĩa là "phân bổ thời gian chạy chuyển mạch" xin vui lòng. – stas