我是 OOP 设计的新手,有很多关于组合与聚合的文章,但我找不到真正的代码示例,所以我写了一个简单的:
class Car
attr_reader :model, :valve
attr_writer :passenger
def initialize(model, valve)
@model = model
@engine = Engine.new(valve)
end
def run
puts "wowowowo"
end
end
class Engine
def initialize(valve)
@valve = valve
end
end
class Passenger
def initialize(name)
@name = name
end
end
p = Passenger.new("Foo")
car = Car.new("9-3 convertible", 4)
car.passenger(p)
以下是这些决定的原因:
对于这种情况,当它的所有者汽车实例不再存在时,引擎实例将不可用。所以发动机遵循汽车的生命周期。
引擎是汽车的一部分,所以汽车拥有引擎。
当汽车实例不再存在时,乘客实例仍然可用,因此乘客有自己的生命周期,
请指出我是否对此有问题,我的代码设计是否良好?
更新:澄清一下,我认为 Car -> Engine 是组合,Car -> Passenger 是 Aggregation