Let's say we have an analytic application (AppX) that allows the import and export of analytic files. We want to build some functionality into it to allow those files to be shared in an enterprise collaboration platform, however we use 2 different platforms, say Jive and Workplace.
While this is somewhat subjective, I'm looking to see if this model matches the convention for OO concepts?
1 - We have in interface CollaborationService defining methods that must be implemented in order to fulfill the full functionality.
2 - We have an abstract class DefaultCollaborationService implements CollaborationService that has some default implementation for some of the operations.
3 - We have a class WorkplaceCollaborationService extends DefaultCollaborationService and a class JiveCollaborationService extends DefaultCollaborationService that each have their own methods, which override those in the Default abstract class.
Or..
Is this better:
2 - abstract class DefaultCollaborationService - note, no link to the interface, so we don't have to implement everything
3 - class WorkplaceCollaborationService implements CollaborationService extends DefaultCollaborationService and class JiveCollaborationService implements CollaborationService extends DefaultCollaborationService
Or..
Is all of that not right, and you can advise a better method?