Python设计模式-outline

python设计模式学习笔记

基于https://github.com/faif/python-patterns 的框架,查询了各个模式的资料,部分译名可能存在其他翻译
施工中,目前进度(17/37)

总述

1 创建型模式(Creational Patterns)

1.1 工厂(Factory)

工厂方法:定义一个用于创建对象的接口函数,可以控制实例化哪一个具体的类。
优点:创建对象时,调用者只需要根据定义好的接口,查询对象名即可,具体对象创建的过程由工厂完成。
缺点:有新的需要创建的对象时,需要增加具体的对象类和对应的工厂实现,维护起来比较麻烦。
详见 Python设计模式-工厂模式(Factory)

1.2 抽象工厂(Abstract Factory)

如果有多个功能类似的工厂,通过抽象工厂,来创建这些工厂。
优点:抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。
缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
详见 Python设计模式-抽象工厂模式(Abstract Factory)

1.3 原型(Prototype)

原型模式通过复制一个"原型实例"并做少量修改,来替代声明多个子类。
优点:原型模式用于创建复杂的或者耗时的实例:复制一个已经存在的实例使程序运行更高效。且对于工厂模式,原型模式减少了子类的构建。
缺点:每一个产品类都必须配置一个克隆方法,并且这个克隆方法需要对类的功能进行整体考虑。
详见 Python设计模式-原型模式(Prototype)

1.4 建造者(Builder)

建造者模式适用于那些内容复杂多变,但是建造过程相同的对象。
优点: 1、建造者独立,易扩展。 2、便于控制细节风险。
缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。
详见 Python设计模式-建造者模式(Builder)

1.5 孤例(Singleton)和Borg

目的:全局数据共享。传统孤立模式(Singleton) 思路为限制一个类最多存在一个实例。Borg模式通过保障同类的所有实例共享所有数据,达到了相同的目的。
详见 Python设计模式-孤例模式(Singleton)及Borg模式

1.6 对象池(Pool)

目的:对于一些创建起来颇费资源,并且一次只有一小部分被使用的对象,通过对象池可以缓存这些实例,以避免反复创建。
使用范围:一般进程池是一个典型的对象池
这部分还存在不明白的地方,但日常工作暂不涉及进程管理,暂时先不深究
详见 Python设计模式-对象池模式(Pool)

1.7 惰性计算(Lazy Evaluation)

目的:类的某个属性来自于一个复杂的耗时的计算,但并不是每次都会调用。通过lazy evaluation模式,可以使该值只在真正需要读取的时候才进行一次计算
详见 Python设计模式-惰性计算/延迟计算(Lazy Evaluation)

2 结构型模式(Structural Patterns)

2.1 三层架构(3-tier)

目的:为了让代码结构呈现“高内聚低耦合”的状态。高内聚是指,一个模块有相关性很强的代码组成,且只负责一项任务,即单一责任原则。低耦合是指:模块之间尽量独立。
三层架构指:

  • 表现层(presentation layer): 也称UI层,程序运行的入口,如果程序包括界面,界面就放在这一层。
  • 业务逻辑层(business logic layer):王城程序的业务逻辑,对数据访问层进行调用,将从数据访问层中获取的数据反馈给表现层
  • 数据层(data):直接操作数据库。
    详见 Python设计模式-三层架构模式(3-tier)

2.2 配适器(Adapter)

目的:配适器主要用于,在一个已有类的基础上,封装一个新的符合协议的接口,使这个类可以按照已知协议调用
详见 Python设计模式——配适器模式(Adapter)

2.3 桥接(Bridge)

目标:将抽象化(Abstraction)与实现化(Implementation)解耦,使得二者可以独立地变化。
优点:类和示例分离,二者可以独立设计,不受约束
缺点:系统可读性降低
详见 Python设计模式——桥接模式(Bridge)

2.4 组合(Composite)

组合模式是用来描述的是一组相同类型的对象的关系。一个组合模式类的实例是用来组合一系列对象(通常是树型结构),以便来描述部分和整体的关系。
对于一组内容可变、调用接口相同的对象组,可以通过组合模式,在不改变调用方式的情况下,快速调整组合内容。
详见 Python设计模式——组合模式(Composite)

2.5 装饰模式(Decorator)

装饰模式是在原有对象的基础上,动态增加一个新的特性。与继承的最大区别是,这种新增特性是比较泛化的,可以被多种对象增加。
原始的装饰模式,需要对输入一个对象,通过装饰函数/类,得到被装饰的对象。实际上,在python中更常用的是通过函数装饰器或者类装饰器,直接将对象所属的类进行装饰。
详见 Python设计模式——装饰模式(decorator)

2.6 外观(Facade)

目的:外观模式用于给复杂系统提供一套简单一致的的接口,以实现某些复杂功能。
详见 Python设计模式——外观模式(Facade)

2.7 享元(Flyweight)

享元模式是一个考虑系统性能的设计模式,通过使用享元模式可以节约内存空间,提高系统的性能。
详见 Python设计模式——享元模式(Flyweight)

2.8 代理(Proxy)

代理模式用于需要给一个类增加一些调用方式,又不想改变其接口。常用于登录控制。
详见 Python设计模式——代理模式(Proxy)

2.9 MVC(Model-View-Controller, MVC)

MVC模式的名称来自于切分软件应用的三个部分,即模型部分、视图部分和控制器部分。MVC被认为是一种架构设计而不是实际模式,但由于其非常重要,在介绍设计模式时无法绕过它。
详见 Python设计模式——MVC模式(Model-View-Controller)

2.10 前端控制器(Front Controller)

前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。
详见 Python设计模式——前端控制器(Front Controller)

3 行为型模式(Behavioral Patterns)

3.1 责任链(Chain of Responsibility)

3.2 目录(Catalog)

3.3 方法链(Chainning Method)

3.4 命令(Command)

3.5 迭代器(Iterator)

3.6 中间人(Mediator)

3.7 备忘录(Memento)

3.8 观察者(Observer)

3.9 发布订阅(Publish Subscribe)

3.10 注册(Registry)

3.11 规约(Specification)

3.12 状态(State)

3.13 策略(Strategy)

3.14 模板(Template)

3.15 访问者(Visitor)

4 Design for Testability Patterns

4.1 依赖注入(Dependency Injection)

5 Fundamental Patterns

5.1 委托(Delegation Pattern)

6 Others

6.1 Blackboard

6.3 (Hierarchical State Machine, HSM)

参考资料

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

posted @ 2022-07-14 16:51  坦先生的AI资料室  阅读(217)  评论(0编辑  收藏  举报