关于Python中的设计模式

何世友 发布于 2011/08/07 12:27
阅读 5K+
收藏 4

开源软件供应链点亮计划,等你来!>>>

python是一门好语言,简洁,流畅,高效(开发效率,现在移动互联网,大多追求的就是开发效率)。

但是在大工程开发中,总感觉我不能很好的弄python的代码结构,很好的复用代码。如果有四人帮那一套设计模式在python的应用该多好。

不知大家对python的设计模式怎么看?    

加载中
1
ValueError
ValueError

引用来自“mallon”的答案

经典的设计模式是面向对象领域的,Python可是多范式的哦

所以应该会有更多模式

看过一本书《Ruby 设计模式》,目录也是四人帮的 29 套模式,但是实现起来完全不同。作者先按照 Java 风格实现出来,然后按照 Ruby 法则逐渐修改,最终成为 Ruby 风格的模式。

我感觉 Python 的入门资料很多,但是这方面的资料比 Ruby 少的太多了。

0
骠骑将军
骠骑将军
python太灵活了,感觉设计模式用处不大
0
何世友
何世友

引用来自“骠骑将军”的答案

python太灵活了,感觉设计模式用处不大
在大工程中,组织不好结构后果还是比较严重的吧。    
0
mallon
mallon
经典的设计模式是面向对象领域的,Python可是多范式的哦
0
asdfsx
asdfsx
该评论暂时无法显示,详情咨询 QQ 群:912889742
0
ValueError
ValueError

说下我已知的几个:

单例模式:Python 的单例模式最好不要借助类(在 Java 中借助类是因为 Java 所有代码都要写在类中),而是通过一个模块来实现。一个模块的模块内全局变量、模块内全局函数,组合起来就是一个单例对象了。

模板方法模式:这个可以像其他语言一样实现,但是如果要遵循鸭子类型原则的话,应该删除公有的抽象父类(或接口),从而追求灵活性。

工厂方法模式、多例模式:这个也不用借助类,直接写一个全局函数作为工厂函数即可。因为 Python 中实例化是通过 call 类来完成的,现在改成 call 工厂函数,对客户抠码者是透明的。(从这点我表示理解 Python 没有 new 操作符的好处了,使用通用的 call 定义,正交性极强)

装饰器模式、代理模式:这个接触过 Python 就不会不知道了,Python 内置的 decorator 语法如此著名。装饰器模式和代理模式都可以通过这种方式完成。另外一种是对对象的装饰或代理,这个也不需要按照契约编程的风格,让代理对象实现被代理对象的抽象。一切动态代理,只需要通过重载属性访问操作符,神马都简单了(和 PHP 通过 __get、__set、__call 来实现动态代理很类似)。

原型模式:这个在 Python 中实现的不是那么爽快,需要调用 copy 来克隆原型对象。但是其实有另一种实现方式:之所以使用原型模式,是因为对象初始化需要较大开销。我们只需要保存初始化的结果,并在产生新对象的时候赋予新对象即可。所以,通过元类控制对象被创建的过程,来实现原型模式,也是一种选择。

0
何世友
何世友

引用来自“无知的TonySeek”的答案

说下我已知的几个:

单例模式:Python 的单例模式最好不要借助类(在 Java 中借助类是因为 Java 所有代码都要写在类中),而是通过一个模块来实现。一个模块的模块内全局变量、模块内全局函数,组合起来就是一个单例对象了。

模板方法模式:这个可以像其他语言一样实现,但是如果要遵循鸭子类型原则的话,应该删除公有的抽象父类(或接口),从而追求灵活性。

工厂方法模式、多例模式:这个也不用借助类,直接写一个全局函数作为工厂函数即可。因为 Python 中实例化是通过 call 类来完成的,现在改成 call 工厂函数,对客户抠码者是透明的。(从这点我表示理解 Python 没有 new 操作符的好处了,使用通用的 call 定义,正交性极强)

装饰器模式、代理模式:这个接触过 Python 就不会不知道了,Python 内置的 decorator 语法如此著名。装饰器模式和代理模式都可以通过这种方式完成。另外一种是对对象的装饰或代理,这个也不需要按照契约编程的风格,让代理对象实现被代理对象的抽象。一切动态代理,只需要通过重载属性访问操作符,神马都简单了(和 PHP 通过 __get、__set、__call 来实现动态代理很类似)。

原型模式:这个在 Python 中实现的不是那么爽快,需要调用 copy 来克隆原型对象。但是其实有另一种实现方式:之所以使用原型模式,是因为对象初始化需要较大开销。我们只需要保存初始化的结果,并在产生新对象的时候赋予新对象即可。所以,通过元类控制对象被创建的过程,来实现原型模式,也是一种选择。

不错!

非常感谢!

期待早日掌握!

0
m
memphis
都是python的牛人啊。。。
0
张卫泉
张卫泉
多谢无知
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部