gpt4 book ai didi

oop - 初始化对象的设计模式?

转载 作者:行者123 更新时间:2023-12-05 06:44:06 28 4
gpt4 key购买 nike

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

例如采用以下代码(在我的 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.list 之前执行 news.setup(3)

但是,是否有任何我应该注意的设计模式?

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

还是我只是太担心这里的小事了。

最佳答案

Should I be creating default values?

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

Or using fixed numbers of arguments to ensure objects are correctly initialized?

您应该确保您的对象不会在无效状态下构造,这将使您和您的代码的其他用户更加简单。

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

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

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

关于oop - 初始化对象的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30868394/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com