
23种设计模式Python版
文章平均质量分 51
设模Python版
云崖先生
持续分享Python、Golang、JavaScript、MySQL、Redis、Elasticsearch、MongoDB等相关知识。
Ps:高产似母猪
展开
-
23种设计模式Python版 24 模板模式
基本介绍在模板模式(Template Pattern)中,一个抽象类公开定义了执行它方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。特点:在有一些通用方法都需要使用时,可将其定义为模板该模式属于行为型模式。案例图示如图所示,为同一个模板传入不同的参数会得到不同的结果:优缺点优点:封装不变部分,扩展可变部分提取公共代码,便于维护行为由父类控制,子类实现缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大代码实现原创 2021-07-10 18:16:19 · 114 阅读 · 0 评论 -
23种设计模式Python版 23 策略模式
基本介绍策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。也就是说该类在不同的环境下,能够调用不同的策略算法。特点:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换该模式属于行为型模式。案例图示如一个人旅游时,当他身在不同的国家中便要说不同的语言:优缺点优点:算法可以自由切换避免使用多重条件判断扩展性良好缺点:策略类会增多所有策略类都需要对外暴露代码实现用Python实现策略模式:# 人class Peopl原创 2021-07-10 18:13:44 · 251 阅读 · 0 评论 -
23种设计模式Python版 22 状态模式
基本介绍状态模式(State Pattern)是指当对象的内部状态改变的时候,允许对象执行不同的流程,这样看起来就像改写了一个对象。核心的方法是把复杂状态变化情况下的流程抽象出来,简化复杂情况状态的判断。特点:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类案例图示定义一个运维脚本,用于监控CPU使用率状态,在不同状态下的自动化运维脚本执行不同的操作:优缺点优点:封装了转换规则枚举可能的状态,在枚举状态之前需要确定状态种类将所有与某个状态有关的行为放到一个类中原创 2021-07-10 18:12:56 · 136 阅读 · 2 评论 -
23种设计模式Python版 21 命令模式
基本介绍命令模式(Command Pattern)是一种数据驱动的设计模式,它将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。特点:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化该模式属于行为型模式。案例图示命令模式应该有一下几个角色:1)Command:定义命令的接口,声明执行的方法,可以理解为一个基类。2)ConcreteCommand:命令接口实现对象,通常会持有接收者,原创 2021-07-10 18:12:25 · 151 阅读 · 1 评论 -
23种设计模式Python版 20 备忘录模式
基本介绍备忘录模式(Memento Pattern)用于保存一个对象的某个状态,以便在适当的时候恢复对象。特点:不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态备忘录模式属于行为型模式。案例图示游戏有存档和删档的功能,当我们进行到某一关时便可对游戏进行存档,下次进入游戏后按照上次的存档位置继续游戏:优缺点优点:给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态实现了信息的封装,使得用户不需要关心状态的保存细节缺点:消耗资源原创 2021-07-10 18:11:55 · 229 阅读 · 0 评论 -
23种设计模式Python版 19 访问者模式
基本介绍访问者模式(Visitor Pattern)可以让多个处理对象对同一个数据对象做出不同的反应,但并不会改变被访问的数据对象。特点:主要将数据结构与数据操作分离访问者模式应该是所有模式中最抽象、最难以理解的一个。该模式属于行为型模式。案例图示上市公司的原始财务数据,对于会计来说需要制作各种报表,对于财务总监来说需要分析公司业绩,对于战略顾问来说需要分析行业变化。它们总是对同一份数据进行访问,但是获得的结果都是不同的:优缺点优点:符合单一职责原则优秀的扩展性灵活性缺点原创 2021-07-10 18:10:57 · 162 阅读 · 1 评论 -
23种设计模式Python版 18 中介者模式
基本介绍中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,中介类来处理不同类之间的通信,并支持松耦合,使代码易于维护。也就是说,消费者和生产者不直接接触,而是通过中介者来建立联系。比如MVC 框架中C(控制器)就是 M(模型)和 V(视图)的中介者。特点:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互中介者模式属于行为型模式。案例图示生产者生成各类产原创 2021-07-10 18:10:22 · 241 阅读 · 2 评论 -
23种设计模式Python版 17 观察者模式
基本介绍观察者模式(Observer Pattern)常用于一对多关系依赖中,当某个对象发生改变后,其他对象也会做出相应的调整策略。特点:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新观察者模式也被称为发布订阅模式,属于行为型模式的一种。案例图示当客户减少到阀值时,销售通知工厂减少生产、人力资源开始裁人,反之则增加:优缺点优点:观察者和被观察者是抽象耦合的建立一套触发机制缺点:如果一个被观察者对象有很多的直接和间接的观原创 2021-07-10 18:09:53 · 114 阅读 · 1 评论 -
23种设计模式Python版 16 迭代器模式
基本介绍迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,而不需要知道集合对象的底层表示。特点:提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示迭代器模式属于行为型模式。案例图示一个对象内部的数据存储结构并不能被直接获取到,而是通过迭代器进行获取。Python本身已经实现了迭代器模式,只需要重写对象中的__iter__()方法和__next__()方法即可。优缺点优点:原创 2021-07-08 21:32:05 · 190 阅读 · 2 评论 -
23种设计模式Python版 15 解释器模式
基本介绍解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文,常被用在 SQL 解析、符号处理引擎等。特点:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用对应文法来解释语言中的语句该模式属于行为型模式。案例图示使用解释器模式,创建一门新的语言,例如A是B,B是C,C是D…可用于加密的工程上:优缺点优点:可扩展性比较好,灵活增加了新的解释表达式的方式易于实现简单文原创 2021-07-08 21:31:29 · 173 阅读 · 0 评论 -
23种设计模式Python版 14 责任链模式
基本介绍责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推(亦可反之,一个处理了给下一个,直到处理完毕或其中一个不再进行处理)。特点:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止该模式属于行为型模式。案例图示这里有3种等级原创 2021-07-08 21:30:59 · 167 阅读 · 1 评论 -
23种设计模式Python版 13 享元模式
基本介绍享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。特点:运用共享技术有效地支持大量细粒度的对象,用HashMap存储这些对象该模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。案例图示当大多数请求都是同一个结果,为每个请求生成一个实例的代价太高。故只要请求的是同一个结果,我们就将已存在的实例进行返回。举个例子,我们有一个报表系统,当第一次请原创 2021-07-08 21:30:14 · 147 阅读 · 1 评论 -
23种设计模式Python版 12 装饰器模式
基本介绍装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。常用于扩展一个类的功能,同时这个新增的功能与原本的类没有任何关联,可以动态的进行撤销。特点:动态地给一个对象添加一些额外的职责装饰器模式属于结构型模式。案例图示在蜘蛛侠被蜘蛛咬之前,他只是一个普通人,但是被蜘蛛咬了之后,他具有了一些超能力。同时,如果超能力在未来某一天没有了,他依然还是原创 2021-07-08 21:29:53 · 159 阅读 · 0 评论 -
23种设计模式Python版 11 代理模式
基本介绍在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。特点:为其他对象提供一种代理以控制对这个对象的访问代理模式属于结构型模式。案例图示买火车票不一定要去火车站买,也可以在网上买,省去了排队的环节:优缺点优点:职责清晰高扩展性智能化缺点:由于在客户端和真实主题之间增加了代理对原创 2021-07-08 21:29:10 · 103 阅读 · 0 评论 -
23种设计模式Python版 10 外观模式
基本介绍外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。特点:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用该模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。案例图示去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理原创 2021-07-08 21:28:32 · 98 阅读 · 0 评论 -
23种设计模式Python版 09 组合模式
基本介绍组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。特点:多个小的构成一个大的,根据不同粒度可以无限制的进行组合该模式属于结构型模式,它创建了对象组的树形结构。案例图示一台计算机由粗看之下由以下配件组成:机箱(chassis)显示器(monitor)核心处理器(CPU)显卡(GPU)内存(memory)硬盘(disk)电源(mains)主板(mother原创 2021-07-08 21:27:50 · 218 阅读 · 3 评论 -
23种设计模式Python版 08 桥接模式
基本介绍桥接模式(Bridge)将一个事物一分为二,把抽象的部分和实现的部分进行抽离,达到解耦的作用。同时,被拆分的2个部分也都可以进行独立的变化。特点:一分为二、独立扩展桥接模式属于结构型模式。案例图示拿一支笔来举例,它拥有钢笔、毛笔等类型(实体)。同时,不同的实体类型有不同的作用,如钢笔就写硬笔字(抽象),毛笔就写软笔字(抽象)。优缺点优点:实现抽象和现实分离,便于维护桥接模式拥有优秀的可扩展能力实现细节对用户透明缺点:增加理解和设计难度代码实现用Pytho原创 2021-07-08 21:26:49 · 217 阅读 · 0 评论 -
23种设计模式Python版 07 适配器模式
基本介绍适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。特点:兼容不同功能接口的2个类,让这2个类都能用相同的方式进行功能调用该模式属于结构型模式。案例图示现在有2种支付方案,AliPay和WechatPay,它们调用支付的方法都不相同:AliPay调用的是aliPayAPI()进行支付WechatPay调用的是wechatPayAPI()进行支付现在我想实现的是不管是AliPay还是W原创 2021-07-08 21:25:44 · 129 阅读 · 1 评论 -
23种设计模式Python版 06 原型模式
基本介绍原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。特点:仅存在一份,后面如果要用类似的就进行克隆拷贝,拷贝方式分2种,深拷和浅拷,原型允许个体中的属性存在差异原型模式更适用于创建一个通用的模板,后续要使用时在此模板的基础上对实例属性进行一定范围内的变更。该模式属于创建型模式。案例图示每台计算机的构成都是类似的,如果要同时组装多台计算机,可采原创 2021-07-07 13:49:55 · 109 阅读 · 0 评论 -
23种设计模式Python版 05 单例模式
基本介绍单例模式(Singleton Pattern)即一个类只能拥有一个实例对象,实例化多次的结果都会指向同一个对象。特点:全局唯一,允许更改该模式属于创建型模式,同时也是创建型模式中应用最为广泛的一种。案例图示从配置文件中读取配置来进行实例化,在配置相同的情况下,就没必要重复产生对象浪费内存了,只有在配置不同的情况下才会生成新的实例。文件内容如下:# settings.py文件内容如下HOST = "localhost"PORT = 3306案例图示:优缺点优点:避原创 2021-07-07 13:49:15 · 130 阅读 · 0 评论 -
23种设计模式Python版 04 建造者模式
基本介绍建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。具体内容是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。特点:灵活,耦合度低,可自由组合,提供暴露接口使用户不必关心底层的实现,直接调用即可建造者模式与抽象工厂模式相似,也用来创建复杂的对象。主要的区别是建造者模式着重一步步构造一个复杂且灵活的对象,而抽象工厂模式着重于同时提供多个系列的产品对象。该模式属于创建型模式。案例图示去肯德基,汉堡、可乐、薯条、炸鸡翅等原创 2021-07-07 13:47:58 · 107 阅读 · 0 评论 -
23种设计模式Python版 03 抽象工厂模式
基本介绍抽象工厂模式(Abstract Factory Pattern)在其他普通工厂模式的2个分支基础上,能够控制产品的类型。该设计模式主要围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。特定:对外隐藏,可搭配普通工厂模式或者工厂方法模式来指定接口,但在此基础上管控了生成产品的零部件来源该模式属于创建型模式。案例图示在普通工厂模式中,造一辆车时如果不对其零部件来源加以控制,可能发现装上了一个不属于该车范畴的配件。但是在抽象工厂模式下,购车造车时专卖店必须负责车辆配件的来源原创 2021-07-07 13:47:03 · 180 阅读 · 0 评论 -
23种设计模式Python版 02 普通工厂模式
普通工厂模式工厂模式(Factory Pattern)是非常常用的一种模式,主要分为2大部分:简单工厂模式工厂方法模式两者同属普通工厂模式,只是在理念上有一些细微的差异。该模式属于创建型模式。简单工厂模式基本介绍用户只需关注自身需要一个什么样的产品,而不用将注意力放在如何构建这个产品上。只要用户构思好了,直接从工厂类的一个指定接口中去拿产品即可。、特点:对外隐藏,只暴露一个接口,但这个接口可以创建出非常多的用户所需要的产品案例图示假如一个用户要买手机,他只需要考虑手机的品牌,原创 2021-07-07 13:46:29 · 107 阅读 · 0 评论 -
23种设计模式Python版 01 设计模式介绍
设计模式设计模式与语言无关,是一种通用的解决思路。是早期的先辈们在实践中总结出的精华,是考虑了封装性、复用性、效率性、可修改性、可一致性等各种因素的高度总结思想。一个良好的设计模式对整个系统的影响极其重要,能大幅度提升可读性,利于团队项目的继承和扩展。反之,如果设计的不好,不光是维护麻烦,项目交接等工作也变的难以展开。GOF1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为Design Pat原创 2021-07-07 13:45:41 · 246 阅读 · 0 评论