Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2019 22:18:16

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

удачен ли пример паттерна "шаблонный метод"?

я продолжаю пытаться написать паттерны таким образом, чтобы код был предельно лаконичный и запоминающийся(то есть связан с реальной жизнью). мне кажется, это эффективный способ именно запомнить, а не вызубрить большое количество нового материала.

оцените пожалуйста пример паттерна “шаблонный метод”. скажите, точно ли я понял его суть и можно ли что-нибудь улучшить? возможно, какой-либо важный момент я упустил из вида.

если я буду делать игру и мне понадобятся 2-100 видов роботов, которые немного похожи между собой, то я буду использовать следующий код:

 #!/usr/bin/env python3
from abc import ABCMeta, abstractmethod
class Terminator(metaclass=ABCMeta):
    def __init__(self):
        self.props = {}
    def template_method(self):
        self.legs_cnt()
        self.hands_cnt()
        self.liquid_body()
        self.steel_skeleton()
        return self
    @abstractmethod
    def legs_cnt(self):
        pass
    @abstractmethod
    def hands_cnt(self):
        pass
    def liquid_body(self):
        pass
    def steel_skeleton(self):
        pass
class T_800(Terminator):
    def legs_cnt(self):
        self.props['legs_cnt'] = 2
    def hands_cnt(self):
        self.props['hands_cnt'] = 2
    def steel_skeleton(self):
        self.props['steel_skeleton'] = True
class T_1000(Terminator):
    def legs_cnt(self):
        self.props['legs'] = 2
    def hands_cnt(self):
        self.props['hands_cnt'] = 2
    def liquid_body(self):
        self.props['liquid_body'] = True
t_800 = T_800().template_method()
print(t_800.__class__, t_800.props)
t_1000 = T_1000().template_method()
print(t_1000.__class__, t_1000.props)

сократил всё что можно, но всё равно кода получилось немало

LIVE DEMO

Отредактировано zlodiak (Март 21, 2019 22:19:29)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version