I have some standard which changes in time. Let's say I have std_v1, std_v2 and std_v3. Those standards have a lot of common parts with some little differences, possible additions and deletions. On top of those standards, I have several concrete implementations, which have a small number of changes.
Right now my class hierarchy looks like:
base / | \ std_v1 std_v2 std_v3 / \ concrete1 concrete2 ...
Where base class collects similarity between std_v1, std_v2, std_v3.
I have some problems with such implementation. For new standard, I need to tweak base class and sometimes previous standard classes to reflect similar code. There is some code in a base class which is used only by one standard. Concrete classes look more than configurations which override public methods, like:
public get_some_data(): return "concrete_data1"
Is there a better way to improve architecture? I thought about composition but can't figure out how to fit it.