组合与聚合示例代码?

问题描述 投票:0回答:1

我是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. 对于这种情况,当引擎实例的owner汽车实例不再存在时,该引擎实例将不可用。因此,发动机遵循汽车的生命周期。

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

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

请指出如果我对此有什么疑问,我的代码是否是好的设计?


更新:为澄清起见,我认为汽车->发动机是组成部分,汽车->乘客是集合体

oop composition
1个回答
0
投票

组成

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

Tree-Leafcomposition。叶是一部分树。没有树木,叶子就不存在。

聚合

[当两个实体之间存在合成时,组成的对象can不存在另一个实体而存在。

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

© www.soinside.com 2019 - 2024. All rights reserved.