1.应用场景 (1)监听事件驱动程序中的外部事件 (2)监听某个对象的状态变化 (3)发布-订阅模型中,消息出现时通知邮件列表中的订阅者 2. 观察者模式UML图 3. 代码实现: #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from abc import ABCMeta, abstractmethod class Subject(object): def __init__(self): '''初始化监听器列表''' self.__observer…
比较常用咯~~ from django.test import TestCase from abc import ABCMeta, abstractmethod # 行为型设计模式---观察者模式 class Subject: def __init__(self): self._observers = [] def register(self, observer): self._observers.append(observer) def notify_all(self, *args, **kw…
一.引言 今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份)把所有的模式写完,2018年,新的一年写一些新的东西.今天我们开始讲“行为型”设计模式的第四个模式,该模式是[观察者模式],英文名称是:Observer Pattern.还是老套路,先从名字上来看看.“观察者模式”我第一次看到这个名称,我的理解是,既然有“观察者”,那肯定就有“被观察者”了,“观察者”监视着“被观察者”,如果“被观察者”有所行动,“观察者”就会做出相应的动…
观察者模式: 在对象之间定义了一种一对多的依赖关系.当一个对象改变它的状态时,全部依赖它的对象会自己主动接收通知并更新自己的状态. Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. UML图: 主要包含: Subjcet(Stock):抽象的主题角色,把全部…
1.应用场景 (1)将一个任务拆分为具有顺序的多个部分,每个类完成相应的部分,并且顺序执行 (2)软件窗口的消息传播 (3)SERVLET容积的过滤器Filter的实现 2.代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from abc import ABCMeta, abstractmethod class Handler(object): @abstractmethod def handle(self): '''具体处理方法在子类中实现…
1.使用场景 (1)调用过程比较繁琐,需要封装 (2)调用参数需要进行处理封装 (3)需要添加额外的功能,例如,日志,缓存,操作记录等 2.代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from abc import ABCMeta, abstractmethod class Receiver(object): '''这时基本的类''' def __init__(self): pass def action_one(self): print…
1.应用场景 (1)将数据和行为进行分离,不同的角色具有不同的行为 2.代码实现…
设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信.但是出于各种原因,你也许并不愿意因为代码环境的改变而对代码做大的修改.也许,你只想根据你的具体应用环境而改进通信代码.或者,你只想简单的重新构造通信代码来避免类和类之间的相互依赖与相互从属. 2.问题 当一个对象的状态发生改变时,你如何通…
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的. 设计模式一般是针对java语言而言,一般的主推面向过程的js .shell.c语言就很少谈那么多种套路了.通常说的设计模式也是从java经验中提取出来的. 但只要是面向对象的语言,设计模式都可以融入,如php python,但脚本语言像python谈论设计模…
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模式类图如下 策略模式角色划分 Strategy 策略接口或者(抽象策略类),定义策略执行接口 ConcreteStrategy 具体策略类 Context 上下文类,持有具…
前言 单例模式是创建模式中比较常见和常用的模式,在程序执行的整个生命周期只存在一个实例对象. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰器详解(三) python设计模式之内置装饰器使用(四) python设计模式之迭代器与生成器详解(五) 目录 简单理解 python实现方法 一般的应用场景 连接mysql实例 简单理解 每个类创建实例化对象的时候,保证在同一个上下文环境中确保某一个类只有一个实例,减少内存的开销.…
python设计模式第2版 目录 第1章 设计模式简介 1 1.1 理解面向对象编程 1 1.1.1 对象 2 1.1.2 类 2 1.1.3 方法 2 1.2 面向对象编程的主要概念 3 1.2.1 封装 3 1.2.2 多态 3 1.2.3 继承 4 1.2.4 抽象 4 1.2.5 组合 5 1.3 面向对象的设计原则 5 1.3.1 开放/封闭原则 6 1.3.2 控制反转原则 6 1.3.3 接口隔离原则 6 1.3.4 单一职责原则 7 1.3.5 替换原则 7 1.4 设计模式的概…
Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要的.所以我在注册用户的时候,就为他们分了两种权限.一种是普通用户的权限,一种是管理员权限.普通用户在数据库中的value是user,管理员的value是admin. 因为我想设计的系统是只有一位管理员的.所以这里我没有根据角色来进行判断.而是根据他的用户名来判断.管理员的用户名是唯一的,那就是adm…
    前言 学习python,官方版本其实足够了.但是如果追求更好的开发体验,耐得住不厌其烦地折腾.那么我可以负责任的告诉你:IPython是我认为的唯一显著好于原版python的工具.   整理了<Python 二三事>:http://pre-sence.com/archives/python-intro   <Python 四五事>:http://pre-sence.com/archives/python-misc 并加入安装IPython部分. 写这篇随笔的原因是:忽然醒悟…
设计模式 ( 二十 ) 访问者模式Visitor(对象行为型) 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同. 例子1:顾客在超市中将选择的商品,如苹果.图书等放在购物车中,然后到收银员处付款.在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品. 此时,购物车作为一个…
设计模式(十)享元模式Flyweight(结构型) 说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释放.我们只是为了学习而简单做了介绍. 1. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展性或抽象性的问题,但在很多情况下需要在系统中增加类和对象的个数.当对象数量太多时,将导致运行代价过高,带来性能下降等问题.比如:例子1:图形应用中的图元等对象.字处理应用中的字符对象等. 2.解决方案:…
今天简单聊聊python的设计模式,GOF设计模式(c++)和Head first design pattern(Java)是两本设计模式的经典,基本可以照搬在python上面,但是你会发现python有很多它特有的东西,比如它并没有多个构造函数,相对应的它有classmethod,所以python设计模式还是有值得聊聊的地方. 构造函数: python2: class Person(object): def __init__(self, name): self.name = name pyth…
  解释器模式(Interpreter)   考虑上图中计算器的例子 设计可以用于计算加减运算(简单起见,省略乘除),你会怎么做?    你可能会定义一个工具类,工具类中有N多静态方法 比如定义了两个方法用于计算a+b 和 a+b-c public static int add(int a,int b){ return a+b; } public static int add(int a,int b,int c){ return a+b-c; } 但是很明显,如果形式有限,那么可以针对对应的形式…
命令模式(Command) 请分析上图中这条命令的涉及到的角色以及执行过程,一种可能的理解方式是这样子的: 涉及角色为:大狗子和大狗子他妈 过程为:大狗子他妈角色 调用 大狗子的“回家吃饭”方法 引子 package command.origin; public class BigDog { public void goHomeForDinner() { System.out.println("回家吃饭"); } } package command.origin; public cla…
享元模式(FlyWeight)  “享”取“共享”之意,“元”取“单元”之意. 意图 运用共享技术,有效的支持大量细粒度的对象. 意图解析 面向对象的程序设计中,一切皆是对象,这也就意味着系统的运行将会依赖大量的对象. 试想,如果对象的数量过多,势必会增加系统负担,导致运行的代价过高. 下面看两个小例子理解下 1.)有一首歌曲叫做<大舌头> 其中有一句歌词“说说说说 说你爱我 我我我我 说不出口” 如果使用面向对象的编程方式对这段歌词进行描述,假设一个汉字表示一个对象,你会怎么做? 你会用七个…
代理模式 PROXY 别名Surrogate 意图 为其他的对象提供一种代理以控制对这个对象的访问. 代理模式含义比较清晰,就是中间人,中介公司,经纪人... 在计算机程序中,代理就表示一个客户端不想或者不能够直接引用一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用 结构 代理模式的根本在于隔离,如下图所示,间接访问 代理对象如何能够真的代理真实对象? 在Java语言中,看起来像的一个方式就是实现同一接口   代理角色和真实对象角色拥有共同的抽象类型,他们拥有相同的对外接口reque…
  桥接模式Bridge   Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来   意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展.  意图解析 依赖倒置原则要求程序要依赖于抽象接口,不要依赖于具体实现. 简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合 抽象 抽象就是将多个事物.实体中共同的概念提取出来 比如,一组共同特性的对象概念,可以提取出来类 如果一些类又具有共同的概念性联系,又可以提取出来抽象类和接口 实…
简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模步骤 - 参照相应的类图确定参与交互的各个对象,通常类在"class", "new", "extends", "implements" 等关键字后,对象名在类名后 - 确定类之间的关系,如依赖.泛化.关联.聚合.组合.实现等 -…
备注:本套笔记内容来源于互联网,只做学习使用,如有侵权请联系本笔记作者. 资料内容 Python 设计模式之路(一)——设计模式 初识 Python 设计模式之路(二)——简单工厂.工厂.抽象工厂模式 Python 设计模式之路(三)——建造者模式 Python 设计模式之路(四)——原型模式 Python 设计模式之路(五)——单例模式…
简介 类图是面向对象分析和设计的核心,用来描述系统各个模块中类与类之间.接口与接口之间.类与接口之间的关系,以及每个类的属性.操作等特性,一般在详细设计过程中实施. 类图本身就是现实世界的抽象,是对系统中各种概念进行建模,并描绘出它们之间的关系,所以类图关注的对象就是元素及元素之间的关系. 类图建模步骤 - 抽象出类实体 - 识别出类的主要属性 - 画出类之间的关系 - 对各个类进行分析.梳理.设计 类图的元素 类图中包含以下几种模型元素:类.接口.关系.协作.注释.约束.包. 类 在UML的图…
设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板.设计模式不会绑定具体的编程语言.一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性).最为重要的是,设计模式也是一把双刃剑,如果设计模式被用在不恰当的情形下将会造成灾难,进而带来无穷的麻烦.然而如果设计模式在正确的时间被用在正确地地方,它将是…
最近打算重构部分python项目,有道是"工欲善其事,必先利其器",所以有必要梳理一下相关设计模式.每次回顾基本概念或底层实现时都会有一些新的收获,希望这次也不例外. 本系列打算先简略介绍面向对象语言的通用特性作为铺垫,这也是设计模式的基础,然后详细介绍python相关的设计模式,辅以简单.易懂.常用的实例,最后略作总结.因为后续会分篇具体介绍各个设计模式的python实现,所以相应的链接会持续更新. 设计模式的优点                                  …
一.结构型设计模式 门面模式与单例模式,工厂模式不同,它是一种结构型模式. 结构型模式描述如何将对象和类组合成更大的结构 结构型模式是一种能够简化设计工作的模式,它能找出更简单的方法来认识或表示实体之间的关系. 结构型模式是类和对象模式的综合体.类模式通过继承来描述抽象,从而提供更有用的程序接口,而对象模式描述了如何将对象联系起来从而组合成更大的对象. 二.理解门面设计模式 它为子系统中的一组接口提供一个统一的接口,并定义一个高级接口来帮助客户端通过更简单的方式使用子系统. 门面所解决的问题是,…
一.理解工厂模式 在面向对象编程中,术语“工厂”表示一个负责创建替他类型对象的类.通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法.客户端使用某些参数调用此方法,之后,工厂会据此创建所需类型的对象,然后将它们返回给客户端. 简单理解:工厂模式依然是一种创建型设计模式,作为工厂,它所关心的是产品的产生,也就是对象的创建,我们利用工厂来创建对象,而不必我们亲自创建对象,我们无需去理解如何创建对象,只需要向工厂提出要求,让工厂去根据你的要求,给你生产你要的产品,给你相应的对象,这种模式便叫…
Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令   上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便…