2011-08-21 45 views
5

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++

+0

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ổ ... –

+0

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 –

+0

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

Trả lời

4

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.

0

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.

Các vấn đề liên quan