3

我有一個A類,它具有B類對象的集合。 A類也可以從類A的其他實例繼承B類對象的集合(缺少更好的術語)。 ,類A的實例指向類A的其他實例(I控制循環引用)。有沒有任何模式,或者是否有繼承數據/對象的標準術語?

一個簡單的具體例子可能是一個人有生物孩子,但也會從配偶和前配偶「繼承」子女。

我在運行時在應用程序中使用類A的實例,並且在應用程序中沒有繼承對象。也就是說,A類實例的「預測」在我應用於不同場景的情況下對我而言是有意義的。

我的問題是,是否有編碼這種模型或標準術語的模式?我不認爲'繼承'在這裏是正確的詞。我有自己的方法來處理它技術上和我自己繁瑣的術語,但我想象有一種標準模式,我可以堅持,我似乎無法找到。

一個不完美的模擬會檢查.NET類的方法,這些類有和沒有它們的繼承方法,或者檢查Javascript中的原型,但在這裏我正在'繼承'記錄/對象。

+2

聽起來像委託模式,除了數據而不是行爲。 – Tobu 2010-01-10 17:18:14

+0

東武,這是一個非常好的點,並感謝您理解這個問題,並堅持不懈。我想知道這種模式是否適用於數據。 – bglenn 2010-01-10 17:36:28

回答

1

不,我不認爲(A)有你在做什麼,也不是(B)與你相似任何突起圖案共同OOP成語。和(C),那就是絕對不錯。現在也許你應該這樣做,也許你不應該這樣做。每當你做一些你很難描述的事情時,你當然應該再次猜測自己,想知道是否有一種更簡單的方法來做到這一點。但是,缺乏描述您的模型的通用術語,而且它不符合您聽說的「模式」,本身並不表示問題。有時候,課堂上必須做些古怪的事情。這纔是重點。如果你爲這些類的消費者封裝了很多複雜的東西,而且它們很直觀,合乎邏輯並且可以發現它們,那麼太棒了!

儘管不正確地使用常用術語來幫助某人理解是一個錯誤。實際上,你上面使用的術語繼承真的讓我困惑,而且我仍然不是100%確定我擁有它。這是嗎?

類ClassA的一個對象維護一個ClassB對象的集合。另外,一些ClassA對象的功能不僅要處理它自己的ClassB對象,還要處理其他ClassA對象維護的對象。爲此,ClassA對象維護對其他ClassA對象的引用。

假設我有正確的當然,我認爲這是一個很好的方式來描述它。由於這裏完全沒有繼承權,所以如果使用了這個術語,就會使人們感到困惑。此外,永遠不要,永遠,每個人都心疼,如果你在做什麼不匹配模式某處。

+0

是的,你基本上已經捕獲了我所描述的內容(儘管這是次要的,只是針對我的用例,ClassA對象僅僅爲了只讀目的而維護對其他ClassA對象的引用)。你是對的,在這裏使用'繼承'這個詞是危險的,這就是爲什麼我把它放在單引號中(我應該解釋爲什麼它是單引號;我的遺漏),爲什麼我要找更多標準術語來使用在我的項目中。你的更一般的評論非常好。我想我會打印您的文章,並在有疑問時提及並更好地睡覺。 – bglenn 2010-01-10 20:25:43

+0

如果沒有人可以引用模式,我會將其標記爲答案。我認爲這個用例是相當普遍的,並且在某個地方被捕獲爲一種模式。我很驚訝。 – bglenn 2010-01-10 20:27:21

0

我認爲你的模型有問題。如果一個類的兩個或多個實例與另一個類的實例的關係,正確的模式是不是讓包含第三實例之一 - 它是讓他們兩個第三。在人類父母的情況下,每個人都應該提及同一個「後代」(人類子女名單)對象。然後,您可以通過引用計數等機制來控制引用的類。

+0

我的問題中沒有「包含」一詞。如果你願意,你可以調用關係'引用'。這是相同的基礎模型。除了語義學之外,我不知道引用計數的相關性是什麼。你能詳細說明嗎?你指的是哪種模式? – bglenn 2010-01-10 17:31:02

0

OOP定義了兩種基本類型的關係:

  1. 一個
  2. 一個

在你有子類別第二類:

  • A 包含
  • B爲甲
  • A是(或引用)B相關聯一個部件

前兩個是類似的,但是您的具體實施例清楚地指第三。父母不包含孩子,與孩子有關係,當有人結婚時,他們與現有家庭建立了新的關係(聯想)。

所以我想答案是否定的,沒有「模式」。您只是將一組關係從一個實例複製/轉換爲另一個實例。

2

對我來說看起來像composite pattern,A對象是複合材料和B葉。指向其他對象的一個​​對象A是根項目。區別似乎是,當獲取葉子項目時,您可以區分根項目是否包含其知道或不知道的其他複合材料的葉子項目。

+0

這很有趣,我需要研究模式,我會回來。 – bglenn 2010-01-10 20:33:12

相關問題