2009-09-15 34 views
7

Tôi đã tự hỏi nếu có một mô hình đối diện của mô hình nhà máy. Ví dụ, khi một đối tượng nào đó cần phải xóa một số công việc phụ cần phải được thực hiện, để hoàn tác cấu hình được thực hiện trong đối tượng nhà máy.Mẫu thiết kế nào đối diện với mẫu Nhà máy?

Mở rộng đối tượng nhà máy bằng phương pháp Xóa chẳng hạn, có vẻ sai, vì mẫu nhà máy là mẫu tạo hình nghiêm ngặt.

Cập nhật: Lý do tôi sử dụng nhà máy là vì cấu hình cần được thực hiện sẽ giới thiệu một số phụ thuộc vào đối tượng không phù hợp. Đặt cấu hình de này trong constructor sẽ đặt ra cùng một vấn đề.

+2

Bạn có ý nghĩa gì với 'xóa'? Giải phóng bộ nhớ, hoặc xóa khỏi kho dữ liệu? –

+0

Khi xóa, tôi có nghĩa là xóa nó khỏi kho dữ liệu, điều này sẽ được thực hiện bởi kho lưu trữ. –

+0

và loại cấu hình nào được thực hiện trong đối tượng nhà máy "? Một đối tượng phải có khả năng tự dọn dẹp sau đó, nhiệm vụ của các destructors và/hoặc xử lý. Tôi sẽ lập luận rằng một nhà máy không nên biết bất cứ điều gì của các đối tượng nó đã tạo ra. –

Trả lời

3

Đó là cách phù hợp để sử dụng nhà máy. Nhà máy không chỉ là cách để tạo ra các đối tượng, mà còn là cách để nói: Tôi cần một khởi tạo đặc biệt cho các loại đối tượng này. Với vấn đề của bạn, tôi nghĩ giải pháp tốt nhất sẽ là thông báo cho nhà máy với một số sự kiện, như được xử lý. Vì vậy, việc tạo đối tượng của bạn sẽ được thực hiện theo cách như vậy: tạo, đăng ký nhà máy với sự kiện của đối tượng mới được tạo. Mỗi khi đối tượng bị xóa, bạn sẽ thông báo cho nhà máy về điều đó và thực hiện hành động bạn cần.

Nếu bạn không thích đặt nó vào nhà máy, bạn có thể ủy quyền nó cho một số loại đối tượng khác, như DeathKeeper ;-). Vì vậy, mã của bạn sẽ trông giống như thế này:

//Inside factory create method 
MyObject obj = GetNewInitializedObject(); 
_detahKeeper.RegisterObject(obj); 

return obj; 

Bây giờ mỗi khi bạn cần xóa đối tượng, đối tượng của bạn sẽ thông báo cho kẻ chết và nó sẽ xử lý tất cả logic. Bằng cách này, tôi không biết làm thế nào nó hoạt động, nhưng bạn có thể sử dụng giao diện IDisposable để làm logic tùy chỉnh để xử lý tài nguyên được tổ chức bởi đối tượng. Quyết định phụ thuộc vào những gì có trong dự án của bạn và tùy thuộc vào bạn.

4

Kho lưu trữ có thể được sử dụng để xóa đối tượng đã tồn tại hoặc bạn có thể sử dụng phương pháp vứt bỏ để thực hiện một số dọn dẹp trên đối tượng chỉ trong bộ nhớ.

+0

Tôi sẽ đặt "cấu hình" này trong kho lưu trữ ngay bây giờ. –

+0

Bạn có cần hủy bất kỳ thông tin (Cơ sở dữ liệu/Tệp) nào tồn tại không? –

2

tôi sử dụng một "Recycling Facility" mô hình làm việc song song với việc Nhà máy:

  • có một phương pháp "sạch" cho mỗi lớp có thể được tái chế
  • có một "id duy nhất" cho từng đối tượng Ví dụ

Mỗi lần một đối tượng đạt end-of-cuộc sống của mình, gửi nó vào "Recycling Facility" (RF):

  • RF lưu trữ đối tượng theo một số chính sách (ví dụ: giữ chỉ trường X của lớp Y)
  • Khi một thể hiện của lớp Y là cần thiết, Nhà máy "yêu cầu" các RF nếu nó có một
    • nếu RF có một tiện dụng, RF gọi là "sạch()" phương pháp trên dụ và trả nó về nhà máy

... và vân vân vân vân.

Hy vọng điều này sẽ hữu ích.