Python中的策略模式:如何处理从一个策略到另一个策略的价值?

2024-10-01 04:48:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要你的帮助来理解如何在Python中正确使用策略模式。
事实上,我不知道如何将一个策略的结果转移到另一个策略。你知道吗

结构是:(文件在这篇文章的底部)

  • 你知道吗应用程序类型你知道吗
  • 你知道吗AStrategyAbstract.py文件你知道吗
  • 你知道吗BStrategyAbstract.py文件你知道吗
  • 你知道吗CStrategyAbstract.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

有人能给我指一下正确的方向吗?你知道吗

谨致问候

皮埃尔


文件名:应用程序类型你知道吗

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")

Tags: 文件nameselfdefdoclassabcprint