Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB

Пример - Абстрактная фабрика на Python

abstract, factory, abc, python

Пример абстрактной фабрики на языке программирования Python

"""
Предоставление интерфейса для создания семейств связанных или зависимых
объектов без указания их конкретных классов.
"""

import abc


class AbstractFactory(metaclass=abc.ABCMeta):
    """
    Объявление интерфейса для методов, которые создают объекты.
    """

    @abc.abstractmethod
    def create_product_a(self):
        pass

    @abc.abstractmethod
    def create_product_b(self):
        pass


class ConcreteFactory1(AbstractFactory):
    """
    Внедрить операции по созданию конкретных объектов фабрики.
    """

    def create_product_a(self):
        return ConcreteProductA1()

    def create_product_b(self):
        return ConcreteProductB1()


class ConcreteFactory2(AbstractFactory):
    """
    Внедрить операции по созданию конкретных объектов продукта.
    """

    def create_product_a(self):
        return ConcreteProductA2()

    def create_product_b(self):
        return ConcreteProductB2()


class AbstractProductA(metaclass=abc.ABCMeta):
    """
    Объявить интерфейс класса.
    """

    @abc.abstractmethod
    def interface_a(self):
        pass


class ConcreteProductA1(AbstractProductA):
    """
    Определить объект продукта, который будет создан соответствующей абстрактной фабрикой.
    Внедрить интерфейс AbstractProduct.
    """

    def interface_a(self):
        pass


class ConcreteProductA2(AbstractProductA):
    """
    Определить объект продукта, который будет создан соответствующей абстрактной фабрикой. 
    Внедрить интерфейс AbstractProduct.
    """

    def interface_a(self):
        pass


class AbstractProductB(metaclass=abc.ABCMeta):
    """
    Объявить интерфейс класса.
    """

    @abc.abstractmethod
    def interface_b(self):
        pass


class ConcreteProductB1(AbstractProductB):
    """
    Определить объект продукта, который будет создан соответствующей абстрактной фабрикой.
    Внедрить интерфейс AbstractProduct.
    """

    def interface_b(self):
        pass


class ConcreteProductB2(AbstractProductB):
    """
    Определить объект продукта, который будет создан соответствующей абстрактной фабрикой.
    Внедрить интерфейс AbstractProduct.
    """

    def interface_b(self):
        pass


def main():
    for factory in (ConcreteFactory1(), ConcreteFactory2()):
        product_a = factory.create_product_a()
        product_b = factory.create_product_b()
        product_a.interface_a()
        product_b.interface_b()


if __name__ == "__main__":
    main()

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
18 ноября 2018 г. 19:19
cyrillwork

Qt - Тест 001. Сигналы и слоты

  • Результат:78баллов,
  • Очки рейтинга2
16 ноября 2018 г. 19:09
Илья Завьялов

Qt - Тест 001. Сигналы и слоты

  • Результат:31баллов,
  • Очки рейтинга-10
16 ноября 2018 г. 12:49
Ирина Минигузина

C++ - Тест 003. Условия и циклы

  • Результат:0баллов,
  • Очки рейтинга-10
Последние комментарии
16 ноября 2018 г. 6:50
Евгений Легоцкой

Добрый день! шаблон не находит, или шаблон неправильно прописали, или тег шаблона неправильно написан, иных выводов сделать не могу, из того, что вы написали. трейсбек нужно смотреть. Со...
16 ноября 2018 г. 6:48
Евгений Легоцкой

пройтись циклом по всем виджетам в обратном порядке for (int i = ui->vertialLayout->count() - 1; i >= 0; --i){ QWidget* w = ui->verticalLyout->itemAt(i)->widget();...
15 ноября 2018 г. 21:35
chunk

Доброго времени суток Евгений. Не подскажете что я делаю не так? Получаю ошибку такого характера: Reverse for 'add_comment' with arguments '('',)' not found. 1 pattern(s) tried: ...
15 ноября 2018 г. 15:35
Михаиллл

Спасибо. Похоже где то описку сделал, поэтому не работало. Я добавил на verticalLayout много виджитов. А можно ли их как то быстро и просто удалить?
15 ноября 2018 г. 14:55
Евгений Легоцкой

verticalLayout - это, по-моему предположению, должен быть у вас объект класса QVBoxLayout, который наследован от QBoxLayout. Поэтому открываете документацию на QVBoxLayout ...
Сейчас обсуждают на форуме
18 ноября 2018 г. 18:11
Metelev

Большое спасибо, все получилось, завтра начну изучать код.
18 ноября 2018 г. 17:49
Чарльз Грин

Спасибо, буду разбераться
17 ноября 2018 г. 14:13
Чарльз Грин

Я сейчас занимаюсь мультимедией, это аудио и видео, программы для концертов и т. д. Бибилиотека Qt очень помогает, она надежная, а надежность в моих приложениях очень важный фактор чтоб не пол...
16 ноября 2018 г. 16:28
Евгений Легоцкой

Добрый день! Спасибо, что воспользовались именно форумом. Заниматься курсовыми работами чьими-то ни было у меня времени нет, у самого полторы работы. Но что-то подсказать на фо...
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы