python 设计模式
文章平均质量分 75
python 常用设计模式
ruguowoshiyu
这个作者很懒,什么都没留下…
展开
-
python 设计模式(二) 六大设计原则六 开放封闭原则(open closed principle)
https://yq.aliyun.com/articles/45638开放封闭原则,是面向对象编程的核心,也是其他五大设计原则实现的终极目标。只有对抽象编程,而不是对具体编程才是遵循了开放封闭原则。开放:指的是软件对扩展开放。封闭:指的是软件对修改封闭。即软件增加或改变需求是通过扩展来到,而不是通过修改来实现的。即一个类定型后尽量不要去修改。而是通过增加新类来满足需求。举例:...原创 2018-08-02 21:14:59 · 1108 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则五 迪米特原则(Law of Demeter)
迪米特原则又称最少知识原则(least knowledge principle)简称LKP。意思是说一个对象应该对其他对象有尽可能少的了解。本篇播客参照了迪米特原则的百度百科,以及这篇播客 六大设计原则之迪米特原则。thanks a lot。迪米特原则的一个解释是(talk only to your immediate friends)。只与直接朋友对话。什么是直接朋友呢。两个类有耦合就是...原创 2018-07-29 14:57:53 · 747 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则四 接口隔离原则(Interface Segregation Principle)
接口隔离原则说明:1 客户端(调用方)不应该依赖于它不需要的接口 2 类之间的依赖关系应该建立在最小接口上比如有两个客户端a,客户端b,都通过接口1分别依赖于类a和类b。客户端a通过接口1依赖于类a的方法1和方法2。而客户端b通过接口1依赖于类b的方法2和方法3。那么如果这样的话,接口1就要实现方法1,方法2,方法3。这个接口1就有点庞杂了。而且,客户端a要实现自己...原创 2018-07-25 20:03:01 · 1041 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则三 依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则1 高层级的模块不应该依赖于低层次的模块,它应该依赖于低层次模块的抽象2 抽象不应该依赖于具体,具体应该依赖于抽象1 高层次的模块不应该依赖于低层次的模型,它应该依赖于低层次模块的抽象什么叫高层次模型,通常所说的客户端就是高层次模型,而其调用的接口即是低层次的模型,这句话也可以说,客户端不应该依赖于接口的具体,而是依赖于接口的抽象。依赖倒置原则的百度百科,举了一个很...原创 2018-07-24 09:12:35 · 3166 阅读 · 0 评论 -
python 设计模式(十四) 模型-视图-控制器模式(Model-View-Controller pattern)
本节选自《精通Python设计模式》【荷】Sakis Kasampalis 关注点分离(Separation of Concerns, SoC)原则是软件工程相关的设计原则之一,SoC原则背后的思想是将一个应用切分为不同的部分,每个部分解决一个单独的关注点。分层设计中的层次(数据访问层,业务逻辑层和表示层等)即是关注点的例子。使用SoC原则能简化软件应用的开发和维护 模型-视图...原创 2018-07-18 08:54:12 · 4153 阅读 · 0 评论 -
python 设计模式(十三) 外观模式(facade pattern)
外观模式又称包装外观模式,从字面意思很好理解,即对某一类复杂操作的封装。封装出更直观通用的接口类,然后给客户端调用。比如,你离开家,要关上灯,关上空调,关上电源等,这是一系列很麻烦的操作,因此,你可以把这一系列的操作封装到一个类中,然后让客户端调用。举例如下:class Equipment(object): def __init__(self): self.name =...原创 2018-07-12 09:06:28 · 570 阅读 · 0 评论 -
python 设计模式(十二) 组合模式(composite pattern)
组合模式的经典定义:将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 举例如下:学校里的教员包括校长,也包括年级主任,也包括普通的学科老师。校长管理年级主任和普通老师,普通老师又被年级主任管理者。下面实现了staff抽象类,teacher(教员)和director(校长和年级主任)都继承自staff抽象类。具体实现如下:import ab...原创 2018-07-10 19:09:01 · 926 阅读 · 0 评论 -
python 设计模式(十一) 代理模式(Proxy pattern)
代理模式在日常生活中很常见,比如,你去杂货店买一个插座,而不是去生产插座的工厂去买。再比如,你去访问某个网站,你并没有访问权限,但你可以通过代理去访问这个网站,然后代理再把内容传给你。讲代理模式之前,先讲下正向代理和反向代理的区别:正向代理上面访问网站的例子就是正向代理,可以用下面的流程图展示这一机制。正向代理:客户端访问某网站,先访问代理,代理去访问某网站,然后把内容返回给客户端,这就是...原创 2018-07-09 11:48:34 · 1603 阅读 · 0 评论 -
python 设计模式(十) 装饰者模式(Decorator pattern)
大家知道,装饰器可以给对象动态地添加行为。装饰器的两大应用场景是:1 权限验证2 添加日志当然装饰器能应用的场景要远多于2种,下面分别用代码实现权限验证和日志:1 权限验证from functools import wrapsdef login_check(func): ''' Decorator check whether user is logged in ...原创 2018-07-05 09:11:35 · 1322 阅读 · 0 评论 -
python 设计模式(九) 适配器模式(adapter pattern)
适配器模式适应在这种场景:客户端需要调用类的方法,但这个类没有这个方法,可以把这个类放到适配器类中加工一下,让适配器具有这有这个方法,这个适配器方法来做类方法的封装。比如,客户端想调用类A的watch_tv方法,但类A中只有turn_on_power(),turn_on_tv()方法。因此可以把类A放入适配器类中,让适配器具有watch_tv方法,并且这个watch_tv方法是turn_on_po...原创 2018-07-04 09:02:07 · 445 阅读 · 0 评论 -
python 设计模式(八) 模板方法模式(template method pattern)
模板方法模式:父类定义了抽象方法和调用抽象方法顺序执行的方法,子类override父类的抽象方法。比如在解决需要分部执行的问题就可以采用这种方法。还以炒菜举例:背景:小明的父母出远门度假去了,只有小明和姐姐一个人在家,碰巧小明的姐姐失恋了,无心为小明准备食物。看来小明只能自己准备饭菜了, 饭是好准备的,交个电饭煲就行了。哪菜呢?这可是个头疼事,不会做怎么办,只能谷歌了。GOOGLE了一小时后,小明...原创 2018-07-01 12:38:05 · 536 阅读 · 0 评论 -
python 设计模式(七) 命令模式(command pattern)
命令模式是利用类来实现对命令函数的封装,实现命令调用者和命令接收者之间的解耦,命令模式具体包括三部分:1 命令调用者(客户端,调用命令的函数或者类)2 命令(对命令接收者命令函数的封装)3 命令接收者(真正执行命令的地方,实现了众多命令函数)三者的关系如下图具体代码实现如下import abcclass Receiver(object): ''' 命令接收者,正在执行命令的地...原创 2018-06-30 13:35:22 · 1670 阅读 · 0 评论 -
python 设计模式(六) 观察者模式(Observer pattern)
观察者模式即当被观察对象发生变化时,能及时通知观察者,这种需求主要用在网站或者店铺的关注上,比如你关注了某个微信公众号,或者淘宝上的商家,当公众号有更新或者店家新到商品或者商品促销时,可以及时通知你。代码实现了E_commerce被观察对象基类。主要实现了属性_observers和方法add_observer(注册观察者),delete_observer(注销观察者), notify_all_ob...原创 2018-06-29 09:15:22 · 1604 阅读 · 0 评论 -
python 设计模式(五) 策略模式(Strategy pattern)
举例一种常见,根据参数的值来做相应处理。比如,同一个网页,对于管理员来说,某地方显示为编辑按钮,但对于一般用户则不显示。这个逻辑很容易实现,只需用if else实现即可。一种场景,大学开学第一天。cs(computer science)专业的学生和es(software engineering)专业的同学共享辅导员。辅导员需要把这两个专业的学生都介绍一遍。如下,代码中实现了一个抽象student类...原创 2018-06-25 19:31:12 · 1197 阅读 · 0 评论 -
python 设计模式(四) 建造者模式(builder design pattern)
建造者模式 我们想要创建一个有多个部分构成的对象, 而且它的构成需要一步步地完成,只有各个部分都创建好了,这个对象才算完成,因此就诞生了建造者模式。建造者模式将一个复杂的构造过程与其表现分离,这样, 同一个构建过程(使用同一个指挥者)可用于创建多个不同的表现。 建造者模式一般包括:一个指挥者(director), 多个建造者(builder),比如你去Kfc点餐,你要了个鳕鱼堡,你同...原创 2018-06-21 08:48:04 · 1075 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则二 里氏替换原则(Liskov Substitution Principle)
里氏替换原则简称LSP。定义:所有引用基类的地方必须能够透明地使用其子类的对象。所谓对象是一组状态和一系列行为的组合。状态是对象的内在特性,行为是对象的外在特性。LSP所表述的就是在同一个继承体系中的对象应该有共同的行为特征。我们在设计对象时是按照行为进行分类的,只有行为一致的对象才能抽象出一个类来。因此,如果说鸵鸟和企鹅属于鸟类的话,就违背了里氏替换原则。如何规范地遵从里氏替换原则:1 子类必须...原创 2018-06-13 20:19:41 · 1435 阅读 · 0 评论 -
python 设计模式(三) 工厂模式
1 简单工厂模式2 工厂模式3 抽象工厂模式原创 2018-06-13 09:29:13 · 1976 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则一 单一职责原则(SRP)
单一职责原则(single responsibility principle) 简称SRP。There should never be more than one reason for a class to change.仅有一种原因引起类的改变。一个类只负责一个职责。单一职责原则 这地址讲的很好,但不是用python语言实现的,在这里我用python语言实现一下。问题由来:类A负责...原创 2018-06-12 09:20:10 · 1330 阅读 · 0 评论 -
python 设计模式(一) 单例模式
单例模式单例模式:不管用类实例化对象多少次,所得到的对象都是同一个对象。这种模式的应用场景,如数据库连接,配置信息等。1 通过类的嵌套实现单例# create singleton by means of class nestificationclass Singleton(object): # really working class class Wrapper_class(o...原创 2018-06-11 18:56:05 · 334 阅读 · 0 评论