Мне нужна ваша помощь, чтобы понять, как правильно использовать шаблон стратегии в Python.
Действительно, я не знаю, как передать результат, полученный из стратегии, в другую.
Структура: (файлыв нижней части этого поста)
- App.py
- AStrategyAbstract.py
- BStrategyAbstract.py
- CStrategyAbstract.py
Запустив приложение ниже, App.py дает мне следующее:
A1 Strategy applied
Give me your name
Foo !
B3 Strategy applied
C2 Strategy applied
___
A2 Strategy applied
Give me your name
Bar !
B1 Strategy applied
C2 Strategy applied
Я хотел бы получить следующее, но я не понимаю, как
A1 Strategy applied
Give me your name
Foo !
B3 Strategy applied
Name given was Foo!
C2 Strategy applied
___
A2 Strategy applied
Give me your name
Bar !
B1 Strategy applied
Name given was Bar !
C2 Strategy applied
Может ли кто-нибудь указать мне правильное направление?
С уважением,
Пьер
Имя файла: App.py
from AStrategyAbstract import A1Strategy,A2Strategy,A3Strategy
from BStrategyAbstract import B1Strategy,B2Strategy,B3Strategy
from CStrategyAbstract import C1Strategy,C2Strategy,C3Strategy
a1_strategy = A1Strategy()
a2_strategy = A2Strategy()
a3_strategy = A3Strategy()
b1_strategy = B1Strategy()
b2_strategy = B2Strategy()
b3_strategy = B3Strategy()
c1_strategy = C1Strategy()
c2_strategy = C2Strategy()
c3_strategy = C3Strategy()
class App(object):
def __init__(self, a_strategy, b_strategy, c_strategy):
self._a_strategy = a_strategy
self._b_strategy = b_strategy
self._c_strategy = c_strategy
self.name = None
def do_sth(self):
self._a_strategy.do_sth()
self._b_strategy.do_sth()
self._c_strategy.do_sth()
class AApp(App):
def __init__(self):
super(AApp, self).__init__(a1_strategy, b3_strategy, c2_strategy)
def start(self):
self.do_sth()
class BApp(App):
def __init__(self):
super(BApp, self).__init__(a1_strategy, b1_strategy, c2_strategy)
def start(self):
self.do_sth()
if __name__ == '__main__':
myaapp = AApp()
myaapp.start()
print("___")
mybapp = BApp()
mybapp.start()
Имя файла: AStrategyAbstract.py
import abc
class AStrategyAbstract(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def do_sth(self):
"""Required Method"""
class A1Strategy(AStrategyAbstract):
def do_sth(self):
print("A1 Strategy applied")
print("Give me your name")
name = input()
class A2Strategy(AStrategyAbstract):
def do_sth(self):
print("A2 Strategy applied")
print("Give me your name")
name = input()
class A3Strategy(AStrategyAbstract):
def do_sth(self):
print("A3 Strategy applied")
print("Give me your name")
name = input()
Имя файла: BStrategyAbstract.py
import abc
class BStrategyAbstract(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def do_sth(self):
"""Required Method"""
class B1Strategy(BStrategyAbstract):
def do_sth(self):
print("B1 Strategy applied")
class B2Strategy(BStrategyAbstract):
def do_sth(self):
print("B2 Strategy applied")
class B3Strategy(BStrategyAbstract):
def do_sth(self):
print("B3 Strategy applied")
Имя файла: CStrategyAbstract.py
import abc
class CStrategyAbstract(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def do_sth(self):
"""Required Method"""
class C1Strategy(CStrategyAbstract):
def do_sth(self):
print("C1 Strategy applied")
class C2Strategy(CStrategyAbstract):
def do_sth(self):
print("C2 Strategy applied")
class C3Strategy(CStrategyAbstract):
def do_sth(self):
print("C3 Strategy applied")