gpt4 book ai didi

ruby - 我们什么时候使用 ruby​​ 模块 vs 使用类组合?

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:40 25 4
gpt4 key购买 nike

以前有人问过与此类似的问题,但我特别询问有关使用组合作为使用模块混入的替代方法的问题。

class Helper
def do_somthing
end
end

如果我需要“使用”一个类而不是继承它,我会简单地组合它并使用它。

class MyStuff
def initialize
helper = Helper.new
helper.do_something
end
end

我为什么要为此创建一个模块:

 module Helper
def do_something
end
end

class MyStuff
include Helper
end

我看到的唯一区别是,如果我使用模块,周围不会有很多 Helper 对象。但是我没有看到任何东西周围有更多的物体而不是更大的物体。

另外,不知道以后要不要子类化。那么,我该如何决定我的库的用户是想要使用模块混合,还是想要使用组合?

最佳答案

HelperMyStuff 类之间的关系是一种所有权关系时,使用组合。这被称为“有一个” 关系。例如,假设您有一个 Person 类和一个 Car 类。你会使用组合,因为一个人有车:

class Person
def initialize
@car = Car.new
end
end

class Car
def accelerate
# implementation
end
end

Helper “表现得像” MyStuff 时,使用模块混合。在这种情况下,Helper 承担 MyStuff角色。这与“is-a”关系有点不同,后者暗示您应该使用传统继承。例如,假设我们有一个 Person 类和一个 Sleeper 模块。人有时会扮演 sleep 者的角色,但其他对象也是如此——例如 DogFrog,甚至可能是 Computer。其他每个类都代表可以进入休眠状态的东西。

module Sleeper
def go_to_sleep
# implementation
end
end

class Person
include Sleeper
end

class Computer
include Sleeper
end

Sandi Metz 的实用 Object-Oriented Design in Ruby是这些主题的优秀资源。

关于ruby - 我们什么时候使用 ruby​​ 模块 vs 使用类组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754768/

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