Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要针对低级设计问题的指导_Python_Oop_Design Patterns_Strategy Pattern - Fatal编程技术网

Python 需要针对低级设计问题的指导

Python 需要针对低级设计问题的指导,python,oop,design-patterns,strategy-pattern,Python,Oop,Design Patterns,Strategy Pattern,我有一节主课。 需要实施五种策略,客户可以在运行时从中选择一种策略。 这里我使用的是策略模式,因为它们的目标是相同的,但算法是不同的。 除了公共函数(在策略类的接口中定义)之外,如果在运行时选择了特定的策略,那么每个策略类中还可能有一些其他函数来满足某些需求。某些要求是指满足要求所需的额外方法,但在用户端可能需要,也可能不需要。 另外,我在Main类中定义了一些常用函数。对任何策略都有帮助的常用方法 class Main: def __init__(self, input):

我有一节主课。 需要实施五种策略,客户可以在运行时从中选择一种策略。 这里我使用的是策略模式,因为它们的目标是相同的,但算法是不同的。 除了公共函数(在策略类的接口中定义)之外,如果在运行时选择了特定的策略,那么每个策略类中还可能有一些其他函数来满足某些需求。某些要求是指满足要求所需的额外方法,但在用户端可能需要,也可能不需要。 另外,我在Main类中定义了一些常用函数。对任何策略都有帮助的常用方法

class Main:
    def __init__(self, input):
        self.other_work = Extra(input)
        self.strategy = Factory(input)
问题1: 如何使用该类:

a = Main(input)

# if want to use some extra function
a.other_work.do_this()

# if related to particular strategy
a.strategy.uncommonStrategy1()
这些挑战是:

  • 用户如何知道这个额外的unexpressegy1函数是在Strategy1类中定义的,而不是在额外类中定义的
  • 我也可以将unmonstrategy1函数放在额外的类中,但它与其他策略无关

  • 用户不需要知道功能在哪里实现。使用继承、python
    import
    或包装函数(根据设计而定)调用专用函数。理想情况下,当触发工作时,用户将不知道或不关心所使用的策略。(但不同的策略可能需要使用不同的参数等进行初始化;因此它不能完全透明)