python设计模式

Posted on 2022-11-27 21:34  呱呱呱呱叽里呱啦  阅读(124)  评论(0)    收藏  举报

Python设计模式

常见开发设计模式

即针对软件设计中普遍存在或者反复出现的问题所提出的解决方案。

接口

接口即若干抽象方法的集合。

接口限制了实现接口的类必须按照接口给定的调用方式实现这些方法,对高层模块隐藏了类的内部实现。

SOLID原则

开放封闭原则

一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

里氏替换原则

所有引用父类的地方必须能透明地使用其子类的对象。

依赖倒置原则

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。应该针对接口编程,而不是针对实现编程。

接口隔离原则

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

单一职责原则

不要存在多于一个导致类变更的原因,通俗的说,一个类只负责一项职责。

设计模式分类

创建型模式

工厂方法模式、抽象工厂模式、创建者模式、原型模式、单例模式

结构型模式

适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式

行为型模式

解释器模式、责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式

创建型模式

简单工厂模式

使用独立的工厂类生产产品类的对象。

优点:隐藏了对象创建的实现细节;客户端不需要修改代码

缺点:违反了单一职责原则,整合了多种创建逻辑;产品类增加需要修改工厂类代码,违反开闭原则

工厂方法

实例 -> 类 -> 类工厂

抽象工厂

简单来说就是把一些具有相同方法的类再进行封装,抽象共同的方法以供调用.是工厂方法的进阶版本.

实例 -> 类 -> 类工厂 -> 抽象工厂

惰性初始化 Lazy evaluation

这个Python里可以使用@property实现,就是当调用的时候才生成.

生成器 Builder

Builder模式主要用于构建一个复杂的对象,但这个对象构建的算法是稳定的,对象中的各个部分经常变化。Builder模式主要在于应对复杂对象各个部分的频繁需求变动。但是难以应对算法的需求变动。这点一定要注意,如果用错了,会带来很多不必要的麻烦。

重点是将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

简单的说:子对象变化较频繁,对算法相对稳定。

单例模式 Singleton

一个类只有一个实例

原型模式

特点是通过复制一个已经存在的实例来返回新的实例,而不是新建实例.

多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据.

对象池 Object pool

一个对象池是一组已经初始化过且可以使用的对象,而可以不用在有需求时创建和销毁对象。池的用户可以从池子中取得对象,对其进行操作处理,并在不需要时归还给池子而非销毁 而不是销毁它.

在Python内部实现了对象池技术.例如像小整型这样的数据引用非常多,创建销毁都会消耗时间,所以保存在对象池里,减少开销.

结构型模式

修饰模型 Decorator

Python里就是装饰器.

代理模式 Proxy

例如Python里的引用计数.

行为型模式

迭代器

迭代容器里所有的元素.