I've designed my game entities using a common pattern of separating the entity from its components. In my case, I've used the Strategy pattern to give each of my entities an IDrawable component. I construct my entities using a factory, which constructs the entity and adds an appropriate drawable, e.g.: public static PlayerEntity CreatePlayerEntity(...) { PlayerEntity playerEntity = new PlayerEntity(...); SpriteDrawable spriteDrawable = new SpriteDrawable(...); playerEntity.Drawable = spriteDrawable; ... return playerEntity; } Now here's the question: If I later want to update the player drawable in some way (e.g. modify the sprite, change the animation, etc.), how and where should I do this? My first thought is to have C# events that the PlayerEntity publishes and the Drawable subscribes to, but this gets tricky from a purist standpoint, because it's hard to do this without the Drawable requiring a reference to a PlayerEntity. My current hacky solution is to subscribe to these events from within the CreatePlayerEntity() method itself, using anonymous delegates, which can take advantage of the fact that you've still got a reference to the concrete IDrawable implementation. It just doesn't seem right for the factory to have this responsibility, though: public static PlayerEntity CreatePlayerEntity(...) { PlayerEntity playerEntity = new PlayerEntity(...); SpriteDrawable spriteDrawable = new SpriteDrawable(...); playerEntity.Drawable = spriteDrawable; playerEntity.SomeEvent += new EventHandler((sender, e) => { spriteDrawable.Texture = blah; }); ... return playerEntity; } What is a better, approved way to accomplish this communication between concrete implementations?