I am looking for a design template to solve an architectural issue that I have.
I use some web services that are the same, but not quite. Several more methods may be available for each new version of web services, but for the most part they are basically the same.
I want to write abstractionlayer, which works regardless of the version of web services that I communicate with. Obviously, if I use a method that exists only in newer versions of web services, I will get some kind of error, but this is normal. I can handle them.
The reason I want this level of abstraction is to avoid the hard link between my application and the version of web services it exchanges with.
What are my options when it comes to design patterns for my level of abstraction? I see that there is one template called “Adapter” and the other is “Bridge”. Do any of them do this in this situation? Any help is appreciated!
Edit - for clarity, here is a drawing. 
Sometimes I want my application to talk to webservices version 1, and sometimes I want it to use webservices version 2. It depends on who uses the client application.
The client application does not have to know or care about which version it is talking to. The only exception is that if he uses a method available only in some versions, I need to handle it gracefully (tell the user that they installed the old version of web services).
source share