简单共享方法是否需要接口?
Are interfaces necessary for simple shared methods?
仅因为一组对象共享几个 public 方法而使用接口是否有任何好处?
例如,我有 GameObject
、GameComponent
和 GameLevel
。每个都有函数 onUpdate()
和 onDraw()
.
我是否应该创建一个包含 onUpdate()
和 onDraw()
的 IGameEntity
接口并让每个对象实现它?我无意存储任何类型的 IGameEntity
列表或任何我只需要访问这两个函数的类似情况,那么这种抽象级别是否具有建设性?
如果您在 classes 中对这些方法有不同的实现,您应该使用接口,另一方面,如果您有方法的基本实现,则可以使用抽象 class.
如果这三个类需要onUpdate()
和onDraw()
方法,那么是的,你需要创建接口并实现它。换句话说,您无法确定所有三个 类 都有 onUpdate()
和 onDraw()
实现。
并且调用接口为 IGameEntityFunction
.
会更好
不,这样做没有任何好处。这是关键声明:
I don't have an intention of storing any kind of list of IGameEntity
's or any similar situation where I only need access to those two functions.
接口的目的是解耦意图和实现。这允许消费者在不引入对实现的依赖的情况下调用接口方法。它还允许在不影响消费者的情况下替换新的实现。
但所有这些优势仅适用于如果有人正在使用该界面。如果一组异构实现者没有用处(例如 IGameEntity
对象的列表),则该接口不提供任何价值。 (事实上 ,界面的存在可能会让消费者相信他们 应该 使用 IGameEntity
对象的列表,而没有理由这样做。)
您可能不需要费心,因为您可以在以后需要时重构它。 (除非代码是 public API 的一部分,在这种情况下应考虑其用户。)
接口是对类型的有意义的约束。通常,我会说名为 IGameEntity
的接口听起来有问题。 是什么呢?从它的功能上来说,它还不如叫IUpdatableDrawable
,但这个名字已经表明它会是个怪人。有时有必要引入这样的概念,但这是在可读性方面的代价,只有在有充分理由的情况下才应该付出代价。
一个好的界面为一组属于一起的功能命名。就像在口头语言中一样,没有用例命名一个概念毫无意义。
仅因为一组对象共享几个 public 方法而使用接口是否有任何好处?
例如,我有 GameObject
、GameComponent
和 GameLevel
。每个都有函数 onUpdate()
和 onDraw()
.
我是否应该创建一个包含 onUpdate()
和 onDraw()
的 IGameEntity
接口并让每个对象实现它?我无意存储任何类型的 IGameEntity
列表或任何我只需要访问这两个函数的类似情况,那么这种抽象级别是否具有建设性?
如果您在 classes 中对这些方法有不同的实现,您应该使用接口,另一方面,如果您有方法的基本实现,则可以使用抽象 class.
如果这三个类需要onUpdate()
和onDraw()
方法,那么是的,你需要创建接口并实现它。换句话说,您无法确定所有三个 类 都有 onUpdate()
和 onDraw()
实现。
并且调用接口为 IGameEntityFunction
.
不,这样做没有任何好处。这是关键声明:
I don't have an intention of storing any kind of list of
IGameEntity
's or any similar situation where I only need access to those two functions.
接口的目的是解耦意图和实现。这允许消费者在不引入对实现的依赖的情况下调用接口方法。它还允许在不影响消费者的情况下替换新的实现。
但所有这些优势仅适用于如果有人正在使用该界面。如果一组异构实现者没有用处(例如 IGameEntity
对象的列表),则该接口不提供任何价值。 (事实上 ,界面的存在可能会让消费者相信他们 应该 使用 IGameEntity
对象的列表,而没有理由这样做。)
您可能不需要费心,因为您可以在以后需要时重构它。 (除非代码是 public API 的一部分,在这种情况下应考虑其用户。)
接口是对类型的有意义的约束。通常,我会说名为 IGameEntity
的接口听起来有问题。 是什么呢?从它的功能上来说,它还不如叫IUpdatableDrawable
,但这个名字已经表明它会是个怪人。有时有必要引入这样的概念,但这是在可读性方面的代价,只有在有充分理由的情况下才应该付出代价。
一个好的界面为一组属于一起的功能命名。就像在口头语言中一样,没有用例命名一个概念毫无意义。