网站参考:
https://sourcemaking.com/design_patterns/strategy
https://refactoringguru.cn/design-patterns/strategy/python/example#lang-features
代码参考:
""" Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it. """ import abc class Context: """ Define the interface of interest to clients. Maintain a reference to a Strategy object. """ def __init__(self, strategy): self._strategy = strategy def context_interface(self): self._strategy.algorithm_interface() class Strategy(metaclass=abc.ABCMeta): """ Declare an interface common to all supported algorithms. Context uses this interface to call the algorithm defined by a ConcreteStrategy. """ @abc.abstractmethod def algorithm_interface(self): pass class ConcreteStrategyA(Strategy): """ Implement the algorithm using the Strategy interface. """ def algorithm_interface(self): pass class ConcreteStrategyB(Strategy): """ Implement the algorithm using the Strategy interface. """ def algorithm_interface(self): pass def main(): concrete_strategy_a = ConcreteStrategyA() context = Context(concrete_strategy_a) context.context_interface() if __name__ == "__main__": main()
上述除了学习了设计模式,还学习到了抽象基类:
1)class Strategy(metaclass=abc.ABCMeta) 抽象基类只能被继承,不能被实例化
2)