【发布时间】:2018-03-20 19:29:53
【问题描述】:
我正在编写一个用于查询Mediawiki API 的框架。我有一个 Page 类,它代表 wiki 上的文章,我还有一个 Category 类,它 is-a Page 具有更具体的方法(比如能够计数类别中的成员数量。我还有一个方法 Page#category?,它通过查询 API 来确定文章的命名空间,确定实例化的 Page 对象是否实际上代表 Mediawiki 类别页面。
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 方面似乎不是一个好主意。另外,你能澄清一下你的最后一句话吗? -
@Mladen:不确定 Ruby 语法,但他似乎想要
Category foo = new Page()而不是Page bar = new Category()。 -
那么他可能应该看看stackoverflow.com/questions/746207/…,一般来说,谷歌一下工厂模式。
-
抱歉,我想在我下班之前发布一个问题并且离开电脑 10 个小时是个坏主意:p 为了清楚起见,我将编辑我的问题。
-
@Mladen @Brian 我希望现在更清楚:)
标签: ruby oop factory-pattern