设计模式概述
# 设计模式 - Python 实现
笔记来源: 罗伟富. 《人人都懂设计模式:从生活中领悟设计模式:Python实现》
设计模式与编程语言没有关系,它是面向对象思想的灵活应用和高度概括,可以用任意语言来实现它。
学习设计模式,应该领悟其设计思想,而不应该局限于代码的层面。例如,监听模式可以应用于网络中的客户端和服务器,比如手机中的各种App的消息推送,服务端是被观察者,各个手机上的App是观察者,一旦服务器上的数据有更新,就会被推送到手机上。在这个应用中你会发现服务器代码和App客户端代码其实是两套完全不一样的代码,它们是通过网络接口进行通信的,所以只停留在代码层面是不够的。
# 23种设计模式
-
在对象之间定义一种一对多的依赖关系,当这个对象状态发生改变时,所有依赖它的对象都会被通知并自动更新。
-
一个对象在其内部状态发生改变的时候,其表现的行为和外在属性不一样,这个对象看上去就像改变了它的类型一样。
-
用一个中介对象来封装一系列的对象交互,中介对象使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
-
装饰模式能够动态地将额外的一些职责附加到一个对象。 装饰器为扩展功能提供了比生成子类的方式更灵活的选择。
-
确保一个类只有一个实例,并且提供一个访问它的全局方法。
-
用于创建重复的对象,同时又能保证性能。
-
为避免请求的发送方与其接收方耦合,让多个对象都有处理请求的机会。将接收对象串起来,并沿着链传递请求,直到有一个对象处理它。(工作流)
-
为其他对象提供一种代理来控制对它的访问。
-
用一个简单的接口封装一个复杂的子系统,使这个系统更容易使用。
-
提供一种方法顺序地访问一组聚合对象(一个容器)中的各个元素,而又不需要暴露该对象的内部细节。
-
将对象组合成树形结构以表示“整体-部分”的层次结构关系。组合使得用户对单个对象和复合对象的使用具有一致性。
-
将复杂对象的构建过程与其表现分离,以便相同的构建过程可以创建不同的表现。
-
将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够在一起工作。
-
定义一系列算法,将每个算法都封装起来,并且使它们之间可以相互替换。
-
专门定义一个类来负责创建其他类的实例。工厂模式又可以派生出简单工厂、工厂方法、抽象工厂模式。
-
将具体的命令与对应的接收者相关联,而调用方与接收方隔离的,调用方只要发送正确的命令,接收方就能准确无误地完成相应的任务。
-
将一个对象的状态或内容作为备份,在状态发生改变或者出行异常时,可以恢复对象之前的状态或内容。
-
运用共享技术有效地支持大量细粒度对象的复用,可以节约内存空间,提高系统的性能。
-
在不改变数据结构的前提下定义作用于这些元素的新操作。
-
面向对象中的继承机制。定义算法框架,将算法中用到的某些具体的步骤放到子类中实现。
-
面向对象中的接口实现机制。抽象和实现解耦,使得它们可以独立地变化。
-
描述如何使用面向对象构建一个简单的语言解释器。