“开-闭”原则(Open-Closed Princip
470 2023-04-03 04:49:28
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 theminterchangeable. Strategy lets the algorithm vary independently fromclients that use it."""import abcclass 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): passclass ConcreteStrategyA(Strategy): """ Implement the algorithm using the Strategy interface. """ def algorithm_interface(self): passclass ConcreteStrategyB(Strategy): """ Implement the algorithm using the Strategy interface. """ def algorithm_interface(self): passdef main(): concrete_strategy_a = ConcreteStrategyA() context = Context(concrete_strategy_a) context.context_interface()if __name__ == "__main__": main()
1)class Strategy(metaclass=abc.ABCMeta) 抽象基类只能被继承,不能被实例化
2)@abc.abstractmethod 当抽象基类中出现这个装饰器意味着子类中这个方法必须实现