初始化对象时的设计模式?

时间:2015-06-16 13:03:52

标签: oop design-patterns

处理可能未完全初始化的对象的推荐方法是什么?

e.g。采取以下代码(在ruby中我的头顶):

class News
  attr_accessor :number

  def initialize(site)
    @site = site
  end

  def setup(number)
    @number = number
  end

  def list
    puts news_items(@site, @number)
  end
end

显然,如果我这样做:

news = News.new("siteA")
news.list

我会遇到问题。我需要在news.setup(3)之前news.list

但是,我应该注意哪些设计模式?

我应该创建默认值吗?或者使用固定数量的参数来确保对象被正确初始化?

或者我只是担心这里的小东西。

1 个答案:

答案 0 :(得分:1)

  

我应该创建默认值吗?

设置默认值是否有意义?如果是这样,这是一个完全有效的方法恕我直言

  

或者使用固定数量的参数来确保对象被正确初始化?

您应该确保无法将对象构建为无效状态,这样可以使您和您代码的其他用户更加简单。

在您的示例中,

不以某种方式初始化number是一个问题,此方法是temporal coupling的示例。你应该避免这种情况,你建议的两种方法是这样做。或者,您可以使用另一个对象或静态方法来负责在有效状态下构建对象

如果你确实有一个未完全初始化的对象,那么任何无效的方法都应该产生适当的描述性异常,让用户知道他们正在错误地使用代码,并提供正确使用模式的示例。

在c#中,InvalidStateException通常是合适的,Java中也存在类似的异常。不幸的是,Ruby超出了我的工资等级:)