Python 设计模式
Python 设计模式
阿慕路泽
To life, like today is the end.
展开
-
23、状态模式
一、状态模式状态模式的定义如下:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。电梯控制器示例:电梯在我们周边随处可见,电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑,即使简单点设计,把状态分成开门状态,停止状态和运行状态,操作分成开门、关门、运行、停止,那流程也是很复杂的。首先,开门状态不能开门、运行、停止;停止状态不能关门,停止;运行状态不能开门、关门、运行。...原创 2019-11-25 10:49:24 · 141 阅读 · 0 评论 -
22、备忘录模式
一、备忘录模式备忘录模式定义如下:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。在备忘录模式中,如果要保存的状态多,可以创造一个备忘录管理者角色来管理备忘录。游戏进度保存:打过游戏的朋友一定知道,大多数游戏都有保存进度的功能,如果一局游戏下来,忘保存了进度,那么下次只能从上次进度点开始重新打了。一般情况下,保存进度是要...原创 2019-11-19 10:56:34 · 146 阅读 · 0 评论 -
21、解释器模式
一、解释器模式解释器模式定义如下:给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。典型的解释器模式中会有终结符和非终结符之说,语法也根据两种终结符,决定语句最终含义。模拟吉他示例:要开发一个自动识别谱子的吉他模拟器,达到录入谱即可按照谱发声的效果。除了发声设备外(假设已完成),最重要的就是读谱和译谱能力了。分析其需求,整个过程大致上分可以分为两部分:根...原创 2019-11-19 10:55:40 · 141 阅读 · 0 评论 -
20、观察者模式
一、观察者模式观察者模式也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,所有依赖于它的对象都会得到通知,并被自动更新。观察者模式的通知方式可以通过直接调用等同步方式实现(如函数调用,HTTP接口调用等),也可以通过消息队列异步调用(同步调用指被观察者发布消息后,必须等所有观察者响应结束后才可以进行接下来的操作;异步调用指被观察者发布消息后,即可进行接下来...原创 2019-11-19 10:54:44 · 144 阅读 · 0 评论 -
19、访问者模式
一、访问者模式访问者模式的定义如下:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义于作用于这些元素的新操作。提到访问者模式,就不得不提一下双分派。分派分为静态分派和动态分派。首先解释下静态分派,静态分派即根据请求者的名称和接收到的参数,决定多态时处理的操作。比如在Java或者C++中,定义名称相同但参数不同的函数时,会根据最终输入的参数来决定调用哪个函数。药房...原创 2019-11-19 10:53:34 · 143 阅读 · 0 评论 -
18、迭代器模式
一、迭代器模式迭代器模式的定义如下:它提供一种方法,访问一个容器对象中各个元素,而又不需要暴露对象的内部细节。在python中,迭代器并不用举太多的例子,因为python中的迭代器应用实在太多了(不管是python还是其它很多的编程语言中,实际上迭代器都已经纳入到了常用的库或者包中)。而且在当前,也几乎没有人专门去开发一个迭代器,而是直接去使用list、string、set、dict等pyth...原创 2019-11-19 10:51:59 · 118 阅读 · 0 评论 -
17、模板模式
一、模板模式模板模式定义如下:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。子类实现的具体方法叫作基本方法,实现对基本方法高度的框架方法,叫作模板方法。股票查询客户端示例:根据股票代码来查询股价分为如下几个步骤:登录、设置股票代码、查询、展示。构造如下的虚拟股票查询器:class StockQueryDevice(...原创 2019-11-19 10:50:14 · 129 阅读 · 0 评论 -
16、中介者模式
一、中介者模式中介者模式的定义为:用一个中介对象封装一系列的对象交互。中介者使各对象不需要显式地互相作用,从而使其耦合松散,并可以独立地改变它们之间的交互。仓储管理系统:有一个手机仓储管理系统,使用者有三方:销售、仓库管理员、采购。需求是:销售一旦达成订单,销售人员会通过系统的销售子系统部分通知仓储子系统,仓储子系统会将可出仓手机数量减少,同时通知采购管理子系统当前销售订单;仓储子系统的库存...原创 2019-11-19 10:49:00 · 115 阅读 · 0 评论 -
15、命令模式
一、命令模式命令模式的定义为:将一个请求封装成一个对象,从而可以使用不同的请求将客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式中通常涉及三类对象的抽象:Receiver,Command,Invoker。饭店点餐系统示例:可以将该系统设计成前台服务员系统和后台系统,后台系统进一步细分成主食子系统,凉菜子系统,热菜子系统。后台三个子系统设计如下:class b...原创 2019-11-19 10:46:59 · 120 阅读 · 0 评论 -
14、责任链模式
一、责任链模式责任链模式的定义如下:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。需要说明的是,责任链模式中的应该只有一个处理者。请假系统示例:假设有这么一个请假系统:员工若想要请3天以内(包括3天的假),只需要直属经理批准就可以了;如果想请3-7天,不仅需要直属经理批准,部门经理需要最终批准;如...原创 2019-11-19 10:45:59 · 125 阅读 · 0 评论 -
13、策略模式
一、策略模式策略模式定义如下:定义一组算法,将每个算法都封装起来,并使他们之间可互换。上一节中我们介绍了桥接模式,二者结构的高度同构,也只能让我们从使用意图上去区分两种模式:桥接模式解决抽象角色和实现角色都可以扩展的问题;而策略模式解决算法切换和扩展的问题。客户消息通知示例:假设某司维护着一些客户资料,需要在该司有新产品上市或者举行新活动时通知客户。现通知客户的方式有两种:短信通知、邮件通...原创 2019-11-19 10:44:46 · 110 阅读 · 0 评论 -
12、桥梁模式
一、桥梁模式桥梁模式又叫桥接模式,定义如下:将抽象与实现解耦(注意此处的抽象和实现,并非抽象类和实现类的那种关系,而是一种角色的关系,这里需要好好区分一下),可以使其独立变化。通过下面实例,让我们来看一下这里的抽象与实现的具体含义:在一个画图程序中,常会见到这样的情况:有一些预设的图形,如矩形、圆形等,还有一个对象-画笔,调节画笔的类型(如画笔还是画刷,还是毛笔效果等)并设定参数(如颜色、线宽...原创 2019-11-16 22:17:20 · 215 阅读 · 0 评论 -
11、享元模式
一、享元模式享元设计模式通过为相似对象引入数据共享来最小化内存使用,提升性能。享元模式定义如下:使用共享对象支持大量细粒度对象。大量细粒度的对象的支持共享,可能会涉及这些对象的两类信息:内部状态信息和外部状态信息。内部状态信息就是可共享出来的信息,它们存储在享元对象内部,不会随着特定环境的改变而改变;外部状态信息就不可共享的信息了。享元模式中只包含内部状态信息,而不应该包含外部状态信息。这点在...原创 2019-11-16 22:16:46 · 112 阅读 · 0 评论 -
10、组合模式
一、组合模式组合模式也叫作部分-整体模式,其定义如下:将对象组合成树形结构以表示“部分”和“整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。公司组织结构示例:每一个公司都有自己的组织结构,越是大型的企业,其组织结构就会越复杂。大多数情况下,公司喜欢用“树形”结构来组织复杂的公司人事关系和公司间的结构关系。一般情况下,根结点代表公司的最高行政权利单位,分支节点表示一个个部门,而...原创 2019-11-16 22:16:17 · 113 阅读 · 0 评论 -
9、门面(外观)模式
一、门面模式门面模式也叫外观模式,定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重“统一的对象”,也就是提供一个访问子系统的接口。示例:假设有一组火警报警系统,由三个子元件构成:一个警报器,一个喷水器,一个自动拨打电话的装置。其抽象如下:class AlarmSensor: def run(sel...原创 2019-11-16 22:15:33 · 101 阅读 · 0 评论 -
8、适配器模式
一、适配器模式适配器模式可以帮我们实现两个(或更多)不兼容接口之间的兼容。先看一个简单的示例,实现两家公司获取员工信息接口的兼容:class ACpnStaff: name="" id="" phone="" def __init__(self,id): self.id=id def getName(self): pri...原创 2019-11-16 22:13:31 · 131 阅读 · 0 评论 -
7、装饰器模式
一、装饰器模式装饰器模式定义如下:动态地给一个对象添加一些额外的职责。在增加功能方面,装饰器模式比生成子类更为灵活。修饰器(Decorator)模式能够以透明的方式(不会影响其他对象)动态地将功能添加到一个对象中。从实现的角度来说,Python修饰器是一个可调用对象(函数、方法、类),接受一个函数对象fin作为输入,并返回另一个函数对象fout。这意味着可以将任何具有这些属性的可调用对象当作一...原创 2019-11-08 18:11:26 · 134 阅读 · 0 评论 -
6、代理模式
代理模式原创 2019-11-08 18:10:02 · 153 阅读 · 0 评论 -
5、原型模式
原型模式原型模式(Prototype design pattern)的动机是为了让用户可以通过复制对象获得一个对象的副本。此模式的出现是因为在C++和Java里需要用此模式来更方便的拷贝对象,但在Python中要实现对一个对象的拷贝有更简单办法,我们就在这里简单的举个例子:#coding=utf-8 class Foo(object): def __init__(self, x, y...原创 2019-11-01 17:38:43 · 141 阅读 · 0 评论 -
4、建造者模式
建造者模式建造者模式的定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的作用,就是将“构建”和“表示”分离,以达到解耦的作用。比如像汽车就由车身、发动机、车轮、方向盘等很多部件组成,而且整个组装的过程可能还要安装一定的顺序进行。class Car(object): """产品 """ def __init__(self, ...原创 2019-11-01 17:38:11 · 158 阅读 · 0 评论 -
3、工厂模式
一、工厂模式工厂模式主要用于简化对象的创建。通常工厂模式有三中表现形式:1、简单工厂,2、工厂方法,3、抽象工厂1、简单工厂示例首先,我们先看一个简单工厂的例子:#coding=utf-8class Mercedes(object): """梅赛德斯 """ def __repr__(self): return "Mercedes-Benz"c...原创 2019-11-01 17:21:59 · 149 阅读 · 0 评论 -
2、单例模式
Python3 单例模式原创 2019-10-27 23:14:53 · 103 阅读 · 0 评论 -
1、设计模式简介
设计模式漫谈原创 2019-10-11 21:21:32 · 151 阅读 · 0 评论