2011-09-28 51 views
0

我有這種兩難選擇,我需要在Gregorian和Julian calanders的不同類型的繼承之間進行選擇。我想要一個名爲Date的類作爲基類。 我的問題如下:我應該有一個從日期類繼承的格里高利班,和朱利安一樣嗎?或者應該只有格里高利的類繼承了日期和朱利安從格里高利繼承,反之亦然?或者我應該在繼承自Date的Date下面有一個類,並讓Gregorian和Julian從該類繼承?C++ Gregoraian和Julian日曆繼承

 Date    Date    Date      Date 

Gregorian Julian  Gregorian   Julian    New class 

          Julian   Gregorian   Gregorian Julian 

我會親自選擇第一個替代方案,它們都從Date繼承,這是一個不錯的選擇。我可以得到som對此的意見嗎?

+0

你是如何保存日期的? D/M/Y作爲單獨的值?像UNIX時間這樣的單個值? – Pubby

回答

3

我不知道日曆系統的內部細節,但我相信很難不低估他們微妙的複雜性。僅此一項就會讓我絕對不想想要在類層次結構中混合實現。

我與

  • 單獨的類(種)從策略/戰略類
  • 可選的非隱式轉換
  • 共享公用事業去避免不必要的重複代碼

PS。在傳統的「Liskov」意義上,你可以擁有一個基本類Date,它只是對所有(大多數?)日曆系統通用的「名稱」概念。但是,我真的懷疑增值是什麼。我可以看到它會導致很多混淆(它會邀請代碼在任何或所有代碼中混合使用Date的子類型,並且所有使用datetime類的代碼都必須準備好始終處理整個色域)。

順便問一下,看看Noda TimeJoda Time。這些備受尊敬的圖書館通常被認爲是特別精心設計的。

+2

偶然發現這個舊日答案,它比我的日曆圖書館早5年左右,並且描述得相當好! +1 :-) https://github.com/HowardHinnant/date –

2

陽曆和朱利安日曆是兩種類型的日曆。他們從共同基類繼承而不是從對方繼承將會更好。

喬達時代可以找到一個例子,它具有格里曆和朱利安年表作爲不同的小類從一個共同的基礎年表。

在標準Java庫中可以找到一個反例,其中Gregorian和Julian日曆由同一個類支持。

+0

我不認爲喬達時間是一個很好的例子,因爲它混合了時區和日曆。顯然我認爲野田時間是一個更好的例子:) –

1

A Calendar不是Date因此不需要從Date繼承。

最多隻有Calendar應該在Dates上運行。或者,也許Date可以將自己從一種轉換爲另一種。

你究竟在做什麼,爲什麼它已經在第三方庫中完成了?