def filename_patterns(self):
        """
        Filename patterns to search for available configuration files (a list of strings).

        The value of :attr:`filename_patterns` is computed the first time it is
        needed. Each of the :attr:`base_directories` generates two patterns:

        1. A pattern generated by :func:`get_main_pattern()`.
        2. A pattern generated by :func:`get_modular_pattern()`.

        Here's an example:

        >>> from update_dotdee import ConfigLoader
        >>> loader = ConfigLoader(program_name='update-dotdee')
        >>> loader.filename_patterns
        ['/etc/update-dotdee.ini',
         '/etc/update-dotdee.d/*.ini',
         '~/.update-dotdee.ini',
         '~/.update-dotdee.d/*.ini',
         '~/.config/update-dotdee.ini',
         '~/.config/update-dotdee.d/*.ini']
        """
        patterns = []
        for directory in self.base_directories:
            patterns.append(self.get_main_pattern(directory))
            patterns.append(self.get_modular_pattern(directory))
        return patterns