I see the argument for avoiding the if/else chain that results from having the network deal with it; that's one of the big ideas behind object orientation and polymorphism. However, encapsulation is another big idea, and I feel like it makes more sense to force the network to know more about its contained objects, and for the contained objects to know less about their container (ideally none, but since they're responsible for calling the container's add function it's unavoidable).