Since you need to adapt to different mechanics\protocols, you can implement Adapter pattern
. Also, adapter can be chosen at runtime, you can also implement Factory pattern
to instantiate an adapter. And then Strategy pattern
to have adapters and factories. All this being done with IoC
to inject dependencies like adapters or factories
solved Abstract Factory Design Pattern for remote file transfer app [closed]