0

我是 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)

以下是这些决定的原因:

  1. 对于这种情况,当它的所有者汽车实例不再存在时,引擎实例将不可用。所以发动机遵循汽车的生命周期。

  2. 引擎是汽车的一部分,所以汽车拥有引擎。

  3. 当汽车实例不再存在时,乘客实例仍然可用,因此乘客有自己的生命周期,

请指出我是否对此有问题,我的代码设计是否良好?


更新:澄清一下,我认为 Car -> Engine 是组合,Car -> Passenger 是 Aggregation

4

1 回答 1

0

作品

当两个实体之间存在组合时,组合对象不能没有另一个实体而存在。组合是强关联,而聚合是弱关联。

树叶组合。_ 叶子是树的一部分。没有树,叶子就不能存在。

聚合

当两个实体之间存在组合时,组合对象可以在没有另一个实体的情况下存在。

Car - Engine聚合。因为如果汽车停止工作,并且我们将其从数据库中删除,引擎将不会被删除,因为它可能仍在运行。我们可以在另一辆车内使用这个引擎。

于 2020-03-10T17:01:49.160 回答