<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def decode_string(self, string, cache, as_map_key):
 """Decode a string - arguments follow the same convention as the top-level 'decode' function. """

        if is_cache_key(string):
            return self.parse_string(cache.decode(string, as_map_key),
                                     cache, as_map_key)
        if is_cacheable(string, as_map_key):
            cache.encode(string, as_map_key)
        return self.parse_string(string, cache, as_map_key)