数码资讯
策略模式
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
网站参考:
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)@abc.abstractmethod 当抽象基类中出现这个装饰器意味着子类中这个方法必须实现
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。