python的编程模式有几种(Python与设计模式之一)
python的编程模式有几种(Python与设计模式之一)在Python中,与对象创建过程有关的方法主要是 __new__() 和 __init__() ,其中 __new__() 负责实例的创建,__init__() 负责实例的初始化。要实现创建型设计模式,主要也是在这两个方法上做文章。创建型模式主要包括工厂模式、建造者模式、原型模式、单例模式等。正如一些人所批评的:之所以需要设计模式,是因为现有编程语言或编程技术的抽象能力不足。那么也就是说,随着时代发展,编程语言和编程技术也在发展,对设计模式的需求也会变化。比如说,有些设计模式会内置在语言特性中,大家在使用的时候甚至完全不会察觉,对Python来说,迭代器、装饰器等都是很明显的例子。经典的设计模式可以分为三类:其一是创建型模式,处理对象创建过程;其二是结构型模式,处理对象之间的关系;其三是行为型模式,处理对象之间的通信。
关于设计模式
设计模式要解决的是如何组织代码的问题,在它下面,是具体的实现细节,即算法和数据结构,在它上面,是更高层次的软硬件架构问题。
如何组织代码,以更简洁、更优雅的方式实现需求,当然要视情形而定。但是也有一些基本思路可供参考,比如经典的二十三种设计模式,可以让大家快速理解问题的核心,也方便人与人之间的交流。
前些年,软件工程中很推崇设计模式,现在则会比较理性一些。
一般认为,一开始写代码的时候,不需要考虑设计模式,之后为了简化代码,或者实现更好的可维护性,或者更优的性能,才考虑通过一些模式进行代码重构,也就是说,“设计模式是在已有的方案之上发现更好的方案”(《精通Python设计模式》)。
正如一些人所批评的:之所以需要设计模式,是因为现有编程语言或编程技术的抽象能力不足。
那么也就是说,随着时代发展,编程语言和编程技术也在发展,对设计模式的需求也会变化。比如说,有些设计模式会内置在语言特性中,大家在使用的时候甚至完全不会察觉,对Python来说,迭代器、装饰器等都是很明显的例子。
模式的分类
经典的设计模式可以分为三类:其一是创建型模式,处理对象创建过程;其二是结构型模式,处理对象之间的关系;其三是行为型模式,处理对象之间的通信。
创建型模式主要包括工厂模式、建造者模式、原型模式、单例模式等。
在Python中,与对象创建过程有关的方法主要是 __new__() 和 __init__() ,其中 __new__() 负责实例的创建,__init__() 负责实例的初始化。要实现创建型设计模式,主要也是在这两个方法上做文章。
工厂模式
工厂模式主要是想通过一段核心代码来简化不同对象的创建过程,这段代码可以是一个函数,也可以是一个类。
比如说,我们有两个岗位:
class ProductManager: pass class Programer: pass
根据不同情况,我们要招聘不同岗位,最直接的方法是提供一个工厂函数:
def recruit(need): return ProductManager() if need == 'talking'\ else Programer()
如果使用一个工厂类,可以通过改写 __new__() 方法实现:
class Recruit: _position = {'talking': ProductManager 'coding': Programer} def __new__(cls need): return cls._position[need]() if need in cls._position\ else None
可能有些人会觉得,类似代码挺常见的,就能叫工厂模式?这种疑问是正常的,如果我们写代码的时候,还要想着用什么模式,不正是模式的失败吗?
当然,实际中的情形可能复杂一些,但工厂模式的本质是一样的:用户只需要提出需求,工厂通过一个简单的接口提供对应的产品。
在上面的例子中,老板当然不需要知道要招什么岗位,他可能也搞不清楚到底有什么岗位,只需要叫来HR,说我需要一个负责 "talking" 的人就可以了。
抱歉,写得很慢,未完待续……
END
公众号:ReadingPython