组合与聚合的示例代码?

时间:2013-05-28 22:07:05

标签: oop composition

我是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. 引擎是汽车的一部分,所以Car 拥有引擎。

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

  4. 请指出我是否有任何不妥之处,我的代码是否设计良好?


    更新:为了澄清,我认为Car - >发动机是组合物,Car - >乘客是聚合

1 个答案:

答案 0 :(得分:0)

组成

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

- 组成 。叶子是树的 的一部分。没有树就没有叶子。

汇总

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

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