基于https://github.com/faif/python-patterns 的框架,查询了各个模式的资料,部分译名可能存在其他翻译
施工中,目前进度(7/38)
工厂方法:定义一个用于创建对象的接口函数,可以控制实例化哪一个具体的类。
优点:创建对象时,调用者只需要根据定义好的接口,查询对象名即可,具体对象创建的过程由工厂完成。
缺点:有新的需要创建的对象时,需要增加具体的对象类和对应的工厂实现,维护起来比较麻烦。
如果有多个功能类似的工厂,通过抽象工厂,来创建这些工厂。
优点:抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。
缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
原型模式通过复制一个"原型实例"并做少量修改,来替代声明多个子类。
优点:原型模式用于创建复杂的或者耗时的实例:复制一个已经存在的实例使程序运行更高效。且对于工厂模式,原型模式减少了子类的构建。
缺点:每一个产品类都必须配置一个克隆方法,并且这个克隆方法需要对类的功能进行整体考虑。
建造者模式适用于那些内容复杂多变,但是建造过程相同的对象。
优点: 1、建造者独立,易扩展。 2、便于控制细节风险。
缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。
目的:全局数据共享。传统孤立模式(Singleton) 思路为限制一个类最多存在一个实例。Borg模式通过保障同类的所有实例共享所有数据,达到了相同的目的。
目的:对于一些创建起来颇费资源,并且一次只有一小部分被使用的对象,通过对象池可以缓存这些实例,以避免反复创建。
使用范围:一般进程池是一个典型的对象池
这部分还存在不明白的地方,但日常工作暂不涉及进程管理,暂时先不深究
目的:类的某个属性来自于一个复杂的耗时的计算,但并不是每次都会调用。通过lazy evaluation模式,可以使该值只在真正需要读取的时候才进行一次计算
https://github.com/faif/python-patterns/readme.md
https://blog.csdn.net/u014472777/article/details/106463132
https://www.cnblogs.com/gaochundong/p/design_pattern_creational_patterns.html