组合对象:从自行车案例看继承与组合的抉择
1. 自行车部件管理的初始问题
在自行车对象的构建中,我们最初面临着部件管理的难题。例如,创建公路自行车和山地自行车时,需要明确每个自行车的尺寸和部件:
road_bike =
Bicycle.new(
size: "L",
parts: Parts.new([chain,
road_tire,
tape]))
mountain_bike =
Bicycle.new(
size: "L",
parts: Parts.new([chain,
mountain_tire,
front_shock,
rear_shock]))
这里存在一个问题,我们需要在代码中明确知道每个自行车需要哪些具体的部件对象,并且要创建这些部件对象。这种知识的分散容易导致代码的混乱和难以维护。
2. 部件配置数组的引入
为了解决上述问题,我们引入了部件配置数组。通过一个简单的二维数组,我们可以清晰地描述每个自行车所需的部件:
road_config =
[['chain', '11-speed'],
['tire_size', '23'],
['tape_color', '