Re: Immutable cyclic graph with dependency injection
On Jun 29, 12:52 pm, Sabine Dinis Blochberger <no.s...@here.invalid>
wrote:
Philipp wrote:
Hello,
I have a structure with two classes, let's call them Car and
SteeringWheel for the example.
Car /owns/ a SteeringWheel: in production code, the lifetime of the
SteeringWheel is directly dependent on the lifetime of the Car.
In my design, the SteeringWheel object needs a reference to the Car
object (let's say, to transmit when the user honks). I see several
ways to build and initialize this class-graph, but none so far that I
think perfect.
What is the best way to create and initialise that structure?
The steering wheel doesn't necessarily need a reference to the car. It
can fire an event of honk, and the car would have a listener for it. I
think this is the observer pattern (I'm not good with names).
This is basically the setter method. Having an addHonkListener
(HonkListener) in SteeringWheel instead of a setCar(Car) is really the
same thing. It is certainly good to use interfaces (Car implements
HonkListener), and using a Collection internally gets rid of the null
check.
private void sendHonk(){
if(car != null){
car.honk();
}
}
is replaced by
private void sendHonk(){
for(Iterator it = honkListeners.iterator(); it.hasNext();){
HonkListener hl = (HonkListener)it.next();
hl.honk();
}
}
But I do not get thread safety: adding an additional honk listener to
the steering wheel may or may not be seen by another thread.
Phil