python模式设计
以极简的文字阐述模式设计思想
Python之战
个人博客:www.likeinlove.com
展开
-
python 23种常用模式设计总结
在二月将python模式设计专题写完,常用模式23种,通过原创的案例和简要的描述来理解模式设计的思想,在代码和项目中达到用最少的代码实现需求。模式设计目录:创建型模式5种《python设计模式(一):工厂方法与抽象工厂及应用场景》《python设计模式(二):建造者模式》《python设计模式(三):原型模式—快速实例化类的一种途径》《python设计模式(四):单例模式及创建型模式总...原创 2019-02-27 21:08:15 · 1574 阅读 · 3 评论 -
python设计模式(二十三):访问者模式
访问者模式,数据结构中保存着许多元素,当改变一种对元素的处理方式但时,我们避免重复的修改数据类的结构,那我们在设计之初就将数据的处理分离,即数据类只提供一个数据处理的接口,而数据类的处理方法我们叫它访问者,那么相同结构的数据面临不同的处理结果时,我们只需要创建不同的访问者。我们假设一种场景:上市公司的原始财务数据,对于会计来说需要制作各种报表,对于财务总监来说需要分析公司业绩,对于战略顾问来说...原创 2019-02-26 23:44:09 · 258 阅读 · 0 评论 -
python设计模式(二十二):策略模式
策略模式,让一个类的行为或其算法可以在运行时更改,策略是让实例化对象动态的更改自身的某些方法使用的是types.MethodType绑定。说起策略的动态更改方法,就不得不对比一下元类的动态增加方法,元类是类的抽象,它负责一个抽象类创建、实例化,是通过type函数来绑定方法。假设这样的一个应用场景:一个人旅游,在不同的国家说不通的语言。示例code:import typescl...原创 2019-02-24 22:03:50 · 341 阅读 · 0 评论 -
python设计模式(二十一):状态模式
状态模式,当对象的内部状态改变的时候,允许对象执行不同的流程,看起来就像改写了一个对象,核心的方法是把复杂状态变化情况下的流程抽象出来,简化复杂情况状态的判断。我们设计一个应用场景:当状态是CPU使用率,在不同状态下的自动化运维脚本执行不同的操作示例code:class Base: def executor(self, value): self.run(va...原创 2019-02-25 09:20:19 · 405 阅读 · 0 评论 -
python设计模式(二十):观察者模式
观察者模式,核心抽象对象管理所有依赖他的其他类,并在设计中使其在发生变动时,主动通知并更新其他类;也叫模型-视图模式、源-收听者模式、从属者模式。该模式必须包含两个角色:观察者和被观察对象。在刚才的例子中,业务数据是被观察对象,用户界面是观察者。观察者和被观察者之间存在“观察”的逻辑关联,当被观察者发生改变的时候,观察者就会观察到这样的变化,并且做出相应的响应。我们设计一种应用场景:当客户...原创 2019-02-22 23:02:33 · 528 阅读 · 0 评论 -
python设计模式(十九):备忘录模式
备忘录,定义是:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。简单来说在运行过程中我们可以记录某个状态,当遇到错误时恢复当前状态,这在业务流程中是用设计来处理异常情况。示例code:class AddNumber: def __init__(self): self.start = 1 ...原创 2019-02-21 23:11:29 · 250 阅读 · 0 评论 -
python设计模式(十八):中介者模式
将其他对象之间的交互装在中介者对象中,达到松耦合、隐式引用、独立变化,与代理模式有相似之感《python设计模式(十一):代理模式模式》,但是代理模式是结构性模式,侧重于对对象调用的接口控制,而中介者模式是行为性模式,解决对象与对象之间相互调用的行为问题。我们以生产者和消费者之间的销售作为一个中介者,用对象来表示生产和购买及流通这个过程。class Consumer: """消费...原创 2019-02-20 21:44:46 · 777 阅读 · 0 评论 -
python设计模式(十七):迭代器模式——迭代器与生成器
迭代模式:对外提供一个接口,实现顺序访问聚合数据,但是不显示该数据的内部机制。这就是Python中大名鼎鼎的迭代器。实现迭代模式对于Python来说没有多余的代码,寥寥几行代码足可以实现迭代模式。示例code:# -*- coding:utf-8 -*-def FibonacciSequence(n): x = 0 y = 1 i = 1 whil...原创 2019-02-19 22:45:11 · 342 阅读 · 0 评论 -
python设计模式(十六):命令模式
“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)命令模式应该有一下几个角色:Command:定义命令的接口,声明执行的方法,可以理解为...原创 2019-02-17 21:02:56 · 258 阅读 · 0 评论 -
python设计模式(十五):责任链模式
将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求;通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。示例code:创建三个不同的对象,每个对象只处理指定范围内的数字,不属于自己的就传递给下一个对象。class Bases: def __init__(self, obj=...原创 2019-02-16 21:45:31 · 350 阅读 · 0 评论 -
python设计模式(十四):模板方法模式
定义一个算法或者流程,部分环节设计为外部可变,用类似于模板的思想来实例化一个实体,可以往模板中填充不同的内容;在模板思想下,实体的整体框架是确定的,他是一个模板,但是模板下内容可变,从而实现了动态的更新流程或算法。示例code:# encoding=utf-8"""实现一个客户点单后的处理流程流程"""class User: def __init__(self, na...原创 2019-02-15 21:56:15 · 674 阅读 · 0 评论 -
python设计模式(十三):解释器模式
此前已经将创造型模式、结构性模式分享了,后面将分享模式设计中的另一种典型模式:行为型模式。创造型模式是解决实体的生成问题、结构性模式是为了解决实体的组合、搭配问题 ,而行为型设计模式的出现是为了解决不同实体通信的问题。解释器模式:开发者自定义一种“有内涵”的语言(或者叫字符串),并设定相关的解释规则,输入该字符串后可以输出公认的解释,或者执行程序可以理解的动作。这种模式被用在 SQL 解析...原创 2019-02-14 23:10:45 · 223 阅读 · 0 评论 -
python设计模式(十二):结构型模式总结
前面总结了创造型结构模式《python设计模式(四):单例模式及创建型模式总结》,及其创造性模式的常用几种模式总结:《python设计模式(一):工厂方法与抽象工厂及应用场景》、《python设计模式(二):建造者模式》、《python设计模式(三):原型模式—快速实例化类的一种途径》。后续分量了结构型模式的几种代表模式:《python设计模式(五):适配器模式——各种类接口的合并》《...原创 2019-02-13 21:34:58 · 525 阅读 · 0 评论 -
python设计模式(十一):代理模式模式
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。组成:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所要实现的业...原创 2019-02-12 21:34:11 · 198 阅读 · 0 评论 -
python设计模式(十):享元模式
元,可理解为python中的元类、最小粒度的类,系统中存在大量的相似对象时,可以选择享元模式提高资源利用率。# -*- coding:utf-8 -*-class FlyweightBase: def offer(self): """享元基类""" passclass Flyweight(FlyweightBase): """共享...原创 2019-02-12 21:32:34 · 244 阅读 · 0 评论 -
python设计模式(九):外观模式
# -*- coding:utf-8 -*-class API1: def Save(self): print('保存数据A') def Del(self): print('删除数据A')class API2: def Save(self): print('保存数据B') def Del(self...原创 2019-02-10 23:40:55 · 277 阅读 · 0 评论 -
python设计模式(八):装饰模式
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。在Python种实现动态扩展对象功能的方法,最简单的是通过复写getattr函数,在getattr种写入我们需要扩展的功能,实例代码如下:image特点(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。...原创 2019-02-09 22:27:58 · 299 阅读 · 0 评论 -
python设计模式(七):组合模式
组合,将对象组合成树状结构,来表示业务逻辑上的[部分-整体]层次,这种组合使单个对象和组合对象的使用方法一样。如描述一家公司的层次结构,那么我们用办公室来表示节点,则总经理办公司是根节点,下面分别由人事办公室、业务办公室、生产办公室、财务办公室,每个办公室下面可以还有跟小的办公室,每个办公室都有职责、人员数、人员薪资等属性;上面描述是逻辑上的描述,用程序如何来实现?看下面代码:cla...原创 2019-02-08 21:42:19 · 989 阅读 · 0 评论 -
python设计模式(六):桥接模式
桥接,是像一座桥连接两岸,而Python程序设计中的桥接指的是抽象部分和实体部分的连接,简单来说是类和类实例化过称中的连接。桥接模式通过在类和类实例化中间作用,使其抽象和实现可以独立变化而不互相干扰,这就是桥接模式最大的作用。核心的思想是通过封装,将一个抽象类的相关参数和方法分别作为桥接类的属性,这样在实例化桥接类后通过修改桥接类的属性,便可以实现抽象和实现之间的独立变化。class...原创 2019-02-07 22:27:10 · 544 阅读 · 0 评论 -
python设计模式(五):适配器模式——各种类接口的合并
适配器可以理解为万能接口,各种类可以通过这个接口然后被调用,达到万能转换的效果。他的实现是以我们定义的适配器函数来分类,将各种类的不同方法注册到对应的分类函数中,调用的时候只需要使用分类名,这样就达到了适配所有类不同方法的效果.示例codeclass A: def a(self): print("我是A类的a方法")class B: def b(...原创 2019-02-06 21:23:40 · 396 阅读 · 0 评论 -
python设计模式(四):单例模式及创建型模式总结
单例,顾名思义是一个实例,即在一个项目之中,单例的类只实例化一次。它常常应用于数据库操作、日志函数。在一个大型项目中使用到日志和数据库操作的地方很多,不能每个文件都去单独实例化一次,此时单例模式就显示出了他的价值。单例的核心在类的内部方法new(),每次实例化都是通过执行new函数来返回实例对象。单例就是在类里面定义一个作用域最高的标志性的属性,如果实例化过一次,那这个属性为True否...原创 2019-02-05 22:15:31 · 376 阅读 · 0 评论 -
python设计模式(三):原型模式—快速实例化类的一种途径
原型是相对于复制、克隆而言,但是不同于模板,模板创造出的东西是一模一样,而原型创造的东西是允许差异化和个性化存在,这就是原型。 原型模式最为核心的两点是:拷贝、属性更新;拷贝指深拷贝copy.deepcopy,属性更新是类的自有属性__dict__的更新。 实例代码:# -*- coding:utf-8 -*-import copyclass Information...原创 2019-02-04 22:30:38 · 479 阅读 · 0 评论 -
python设计模式(二):建造者模式
建造者,顾名思义是修建建筑的工人,按照基本的施工方式:打桩-浇筑框架-砌墙-装修,同样的施工流程却能造就千差万别的建筑,因为不同的材料、不同设计,可以表现出千差万别,这就是建造者模式的简要理解。示例代码:# -*- coding:utf-8 -*-class Builder():"""建造流程:原料—施工"""def __init__(self):self.materiel = Non...原创 2019-02-03 22:44:51 · 370 阅读 · 0 评论 -
python设计模式(一):工厂方法与抽象工厂及应用场景
工厂方法与抽象工厂是否傻傻分不清,力求以最简单和最直接的方式来理解模式设计,毕竟模式的初衷是化繁为简,就该用最简单的方式来理解。 示例code:工厂模式# -*- coding:utf-8 -*-class A: def __init__(self): self.word = "运行A" def run(self): pr...原创 2019-02-02 23:05:11 · 949 阅读 · 0 评论