Написанный мой пример не имеет практического смысла, он создан исключительно для тренировки и понимания. Пример заключается в создании класса ObjectFactory, который на основе указанных ему данных приписывает некие реализации неким типам входных данных. С использованием этого класса написан класс Converter, который можно конфигурировать под словарь с готовым соотношением типов данных и реализаций.
Конкретный пример использования этих классов, который я реализовал - конвертация разных типов данных в список.
Код успешно функционирует, выполняя поставленную перед ним задачу. Так вот сам вопрос - можно считать написанный мной код примером паттерна “Фабричный метод”?
from decimal import Decimal class ObjectFactory: """Компонент Creator, использующий принцип регистрации реализаций""" def __init__(self): self.builders = {} def register(self, data_type, func): self.builders[data_type] = func def create(self, obj, **kwargs): builder = self.builders.get(type(obj)) if not builder: raise ValueError(key) return builder(obj, **kwargs) class Converter: """Класс, реализующий компонент Client""" def __init__(self, formats): self.factory = ObjectFactory() for i in formats: self.factory.register(i, formats[i]) def convert(self, obj, **kwargs): builder = self.factory.create(obj, **kwargs) return builder def str_to_list(obj): return list(obj) def int_to_list(obj): return list(str(obj)) def dict_to_list(obj, mode=0): if mode: return list(obj.values()) else: return list(obj.keys()) def float_to_list(obj, mode=0): if mode: obj = Decimal(str(obj)) return [float(obj // 1), float(obj % 1)] else: return list(str(obj)) if __name__ == '__main__': tolist_config = { int: int_to_list, str: str_to_list, dict: dict_to_list, float: float_to_list } tolist = Converter(tolist_config) num = 16 list1 = tolist.convert(num) string = 'abc' list2 = tolist.convert(string) float_num = 1.23 list3 = tolist.convert(float_num, mode=1) dict_ = {0: 1, 1: 2, 2: 3} list4 = tolist.convert(dict_, mode=1) print(list1, list2, list3, list4, sep='\n')