Factor decorator `subclass_responsibility`

Change `Decorator` to properly support `classmethod`