似乎许多OO讨论使用Java或C#作为示例(例如Head First Design Patterns).
这些模式是否同样适用于Python?或者如果我遵循设计模式,我最终会用Python编写Java(这显然是一件非常糟糕的事情)?
最大的区别是Python是鸭子类型,这意味着你不需要像Java那样详细规划类层次结构,并且具有一流的功能.例如,当您可以只传递一个函数而不是必须创建接口等来模拟高阶函数时,策略模式变得更加简单和明显.更一般地说,Python具有许多常见设计模式的语法糖,例如迭代器和前面提到的策略.理解这些模式可能是有用的(我读过Head First并发现它非常有用),但想想Pythonic实现它们的方法,而不仅仅是像在Java中那样做事.
Python有它自己的设计习语.有些标准模式适用,有些则不适用.战略或工厂之类的东西都有语言支持,使它们透明化.
例如,对于一流的类型,任何东西都可以是工厂.不需要工厂类型,您可以直接使用该类来构造您想要的任何对象.
基本上,Python有自己的设计习惯,有些不同,主要是因为它非常动态并具有令人难以置信的内省功能.
例:
x = list my_list = x(range(0,5)) #creates a new list by invoking list's constructor
通过将类类型分配给可调用对象,您基本上可以删除代码中的任何"工厂"类型.您只剩下产生符合某些给定约定的对象的callable.
此外,Python中的设计模式无法有效地用其他静态类型语言表示.元类和函数装饰器就是很好的例子.