【Python设计模式】策略模式

用python写设计模式其实已经被简化了很多,如果有条件的话(熟悉Java/C#)我还是会计较倾向于用其他非解释型语言来熟悉设计模式,但是没办法,Java只懂皮毛,看了《大话设计模式》后对策略模式有了一个比较清晰的了解,在这里记录一下加深印象。

策略模式主要思想是将算法封装成一个个独立的类,从而实现复用和方便维护。

首先创建一个抽象的算法接口类,python中可以用@abstractmethod抽象方法装饰器来实现。

'''创建算法抽象类接口'''
class Strategy(ABC):
    @abstractmethod
    def algorithm_interface(self):
        pass

接着创建具体实现算法,实现抽象接口类中的接口方法。

'''算法A实现算法抽象类接口'''
class ConcreteStrategyA(Strategy):
    def algorithm_interface(self):
        print('算法A实现')


'''算法B实现算法抽象类接口'''
class ConcreteStrategyB(Strategy):
    def algorithm_interface(self):
        print('算法B实现')


'''算法C实现算法抽象类接口'''
class ConcreteStrategyC(Strategy):
    def algorithm_interface(self):
        print('算法C实现')

然后再用一个类对这些算法调用做一个管理,这样每次有新的需求,我们只需要新增一个算法类实现抽象算法接口类的方法,然后实例化这个算法类作为参数传入算法管理类中完成调用,对原来的代码内容不需要做任何修改,实现软件设计的开闭原则。

'''创建管理和维护算法类的类'''
class Context:
    def __init__(self, strategy):
        self.strategy = strategy

    def context_interface(self):
        self.strategy.algorithm_interface(self)

最终代码,看着好眼熟,其实自己无形之中也用过这种方式,只不过当时不知道这个就叫策略模式。

from abc import abstractmethod, ABC


'''创建算法抽象类接口'''
class Strategy(ABC):
    @abstractmethod
    def algorithm_interface(self):
        pass


'''算法A实现算法抽象类接口'''
class ConcreteStrategyA(Strategy):
    def algorithm_interface(self):
        print('算法A实现')


'''算法B实现算法抽象类接口'''
class ConcreteStrategyB(Strategy):
    def algorithm_interface(self):
        print('算法B实现')


'''算法C实现算法抽象类接口'''
class ConcreteStrategyC(Strategy):
    def algorithm_interface(self):
        print('算法C实现')


'''创建管理和维护算法类的类'''
class Context:
    def __init__(self, strategy):
        self.strategy = strategy

    def context_interface(self):
        self.strategy.algorithm_interface(self)


if __name__ == '__main__':
    a = ConcreteStrategyA
    b = ConcreteStrategyB
    c = ConcreteStrategyC
    context = Context(a)
    context.context_interface() #调用算法A
    context = Context(b)
    context.context_interface() #调用算法B
    context = Context(c)
    context.context_interface() #调用算法C
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值