快捷搜索:  汽车  科技

python的编程模式有几种(Python与设计模式之一)

python的编程模式有几种(Python与设计模式之一)在Python中,与对象创建过程有关的方法主要是 __new__() 和 __init__() ,其中 __new__() 负责实例的创建,__init__() 负责实例的初始化。要实现创建型设计模式,主要也是在这两个方法上做文章。创建型模式主要包括工厂模式、建造者模式、原型模式、单例模式等。正如一些人所批评的:之所以需要设计模式,是因为现有编程语言或编程技术的抽象能力不足。那么也就是说,随着时代发展,编程语言和编程技术也在发展,对设计模式的需求也会变化。比如说,有些设计模式会内置在语言特性中,大家在使用的时候甚至完全不会察觉,对Python来说,迭代器、装饰器等都是很明显的例子。经典的设计模式可以分为三类:其一是创建型模式,处理对象创建过程;其二是结构型模式,处理对象之间的关系;其三是行为型模式,处理对象之间的通信。

python的编程模式有几种(Python与设计模式之一)(1)


关于设计模式

设计模式要解决的是如何组织代码的问题,在它下面,是具体的实现细节,即算法和数据结构,在它上面,是更高层次的软硬件架构问题。

如何组织代码,以更简洁、更优雅的方式实现需求,当然要视情形而定。但是也有一些基本思路可供参考,比如经典的二十三种设计模式,可以让大家快速理解问题的核心,也方便人与人之间的交流。

前些年,软件工程中很推崇设计模式,现在则会比较理性一些。

一般认为,一开始写代码的时候,不需要考虑设计模式,之后为了简化代码,或者实现更好的可维护性,或者更优的性能,才考虑通过一些模式进行代码重构,也就是说,“设计模式是在已有的方案之上发现更好的方案”(《精通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

猜您喜欢: