Sign in to follow this  
MattieB

Design problem instanceof

Recommended Posts

MattieB    126
Hi, i'm making a domotica design tool. I have the following design problem: I've got 6 domotica items (thermometer, doorsensor, pushbutton, alarmbell, jacuzzi, lightbulb) and 4 blueprintitems(wall, room, window, door). I have a blueprintItemManager who manages the blueprintitems: location(coordinate), name and owners(owner of a room are a couple of walls, owner of a window is a wall, a room and the "outside" room, the owner of a door is a wall and the two rooms it connects). The domoticaitemmanager manages the domotica items: name and owners (owner of an alarmbell is a wall, owner of a doorbutton is a door, owner of a thermometer is a wall, owner of a jacuzzi is a room). Basically, the owner of a domotica item is a blueprintitem where it can be placed on. That means that there are some rules where a domotica item can be placed. I'm trying to figure out how i can define those rules (using a good design). At the moment I have a class with a method check() and two parameters: BlueprintItem and DomoticaItem. The check method uses instanceof for the two parameters and returns true if the given domoticaitem can be placed on the given blueprint item... which I think is crap, because I don't like instanceof. I'm not seeiing another way. I don't want to make an abstract method in the superclass domoticaitem (or blueprintItem) and overloading it in the subclasses. The subclasses don't need to know where they can be placed on (and i still have to use instanceof). Anyone got an idea? Thanks, Jan (PS: I'm using java, but that is rather irrelevant)

Share this post


Link to post
Share on other sites
lightbringer    1070
Maybe use composition. A given blueprint item has a list of domotica items it owns. It has addDomotica() overloaded for all the types it can own, say addDomotica(Thermometer t) and addDomotica(Wallknob k). Is that what you're after?

Edit: By the way, I don't think domotica is a valid english word ^_^.

Share this post


Link to post
Share on other sites
OrangyTang    1298
What you're looking for is double dispatch. This should do exactly what you're after. The snag is that all objects (on both sides of the dispatch) end up 'knowing' about each other, so this is less than ideal if you want to add lots of new types at a later point.

Edit: Better link.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this