If you build an object that acts as a bridge pattern you can do this with only three objects. When the UI asks the BizObj for data the bizobj creates a contained object that knows how to talk to the UI. When the bizobj needs to get data it creates a contained object that knows how to talk to the backend. This way the bizobj can change its personality on the fly.