Antonchik
@Antonchik
Программирую на HTML

Правильно ли я сделал Абстрактную Фабрику?

Здравствуйте. Разбирался с паттерном абстрактная фабрика, попробовал написать свою фабрику, суть в том что есть некая игра rpg и на каждом уровне может быть 2 моба и один бос, правильно ли я это реализовал?
class LevelFactory(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def get_mob_1(self):
        pass

    @abc.abstractmethod
    def get_mob_2(self):
        pass

    @abc.abstractmethod
    def get_boss(self):
        pass


class Mob(object):
    def __init__(self, hp, damage):
        self.__hp = hp
        self.__damage = damage

    def __str__(self):
        return 'hp: {}, damage: {}'.format(self.__hp, self.__damage)


class Boss(object):
    def __init__(self, hp, damage, super_kick):
        self.hp = hp
        self.damage = damage
        self.super_kick = super_kick

    def __str__(self):
        return 'The boss. Damage: {}, hp: {}, super kick: {}'.format(self.damage, self.hp, self.super_kick)


class Level1Factory(LevelFactory):
    def get_boss(self):
        return Boss(300, 43, 'lightning')

    def get_mob_1(self):
        return Mob(45, 10)

    def get_mob_2(self):
        return Mob(60, 15)


class Level2Factory(LevelFactory):
    def get_boss(self):
        return Boss(590, 89, 'fire')

    def get_mob_1(self):
        return Mob(83, 29)

    def get_mob_2(self):
        return Mob(113, 45)
  • Вопрос задан
  • 520 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
Фабрика сделана правильно, но нужно смотреть код где она используется. Поскольку Ваша фабрика отвечает за создание нескольких разных объектов есть риск нарушения принципа разделения интерфейсов
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@isisTance
Python, C#, C++, HTML, CSS, backend developer.
Можно сделать функцию инита, и принимать уровень уровня. Потом маленький иф и профит)
З.Ы. Если будет скучно, попробуй делать вычисления с помощью уровня. Т.е. каждый уровень будет давать например 5% к хп боссу, или кол-во врагов. Да для бесконечной генерации подойдет. А позицию например рандомно. Надеюсь все ясно)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы