I would use subclasses. Define a base-class which implements "everything that you can do to or with a social network." It serves as an abstraction. Now, implement common behavior in the base class, purposely separating it all into methods which are put there to be overridden. Finally, define each network-specific subclass which overrides methods according to exactly what's unique or different about that network. The caller doesn't care which subclass it is actually calling.