2.4.1 设计模式的消亡

经典的设计模式有 23 个,虽然设计模式都是常用代码的总结,理论上来说与语法无关。但不得不承认的是,标准的设计模式在不同的语言中,有的因为语法的限制根本无法轻易实现(比如在 C 语言中实现组合模式),有的则因为语言的特定功能,变得冗余啰嗦。

以策略模式为例,有一个抽象的策略类,定义了策略的接口,然后使用者选择一个具体的策略类,构造他们的实例并且调用策略方法。具体代码可以参考:策略模式在百度百科的定义

然而这些对象本身并没有作用,它们仅仅是可以调用相同的方法而已,只不过在 Java 中,所有的任务都需要由对象来完成。即使策略本身就是一个函数,但也必须把它包裹在一个策略对象中。所以在 Python 中更优雅写法是直接把策略函数作为变量使用。不过这就引入一个问题,如何判断某个函数是个策略呢,毕竟在面向对象的写法中,只要检查它的父类是否是抽象的策略类即可。

也许你已经见过类似的写法:

@strategy
def strategyA(n):
    print(n * 2)

下面就开始介绍装饰器。

Last updated