我正在編寫一個查詢Mediawiki API的框架。我有一個Page
類,代表維基上的文章,我也有Category
類,其中是-aPage
更具體的方法(如能夠計算類別中的成員數量。也有一個方法Page#category?
其確定某個實例化Page
對象實際上是代表Mediawiki的分類頁面中,通過查詢API來確定文章的命名空間。將類轉換爲實例化的子類
class Page
def initialize(title)
# do initialization stuff
end
def category?
# query the API to get the namespace of the page and then...
namespace == CATEGORY_NAMESPACE
end
end
class Category < Page
# ...
end
我想什麼做的是能夠檢測我的框架的用戶是否嘗試使用Page對象(例如Page.new("Category:My Category")
)實例化Mediawiki類別,如果是,則實例化Category
對象,而不是Page
對象,直接來自Page
構造函數。
在我看來,這應該是可能的,因爲它讓人想起Rails中的單個表繼承,但我不知道如何去實現它的工作。
'Page'中的'category?'方法意味着祖先類意識到了子類,這看起來不是好主意,OOP明智。另外,你能澄清你的最後一句話嗎? – 2010-07-30 17:51:06
@Mladen:對Ruby語法不太確定,但他似乎希望'Category foo = new Page()'而不是'Page bar = new Category()'。 – 2010-07-30 17:56:01
然後他應該看看http://stackoverflow.com/questions/746207/ruby-design-pattern-how-to-make-an-extensible-factory-class,一般來說,谷歌有一些關於工廠模式。 – 2010-07-30 18:02:13