随笔分类 -  设计模式

使用Python简单实现的几种设计模式
摘要:之前写过Python的设计模式,由于经常不使用Python,回过头来再看Python的设计模式,有时候感觉并不是那么的显而易见,所以使用c#重新将代码编写一遍,更加清晰明了。这里借用原来的介绍,对模式做简要说明,模式简易说明和类图,请查看 http://www.cnblogs.com/cotton/... 阅读全文
posted @ 2015-03-27 15:45 棉花年度 阅读(7107) 评论(13) 推荐(25) 编辑
摘要:模式说明装饰者模式装饰者模式可以动态地给一个对象增加一些额外的职责。就增加功能来说,装饰者模式相比生成子类更为灵活。模式结构图程序示例说明:一辆车,装饰窗户,装饰轮子代码:class Car(object): def description(self): print 'basic... 阅读全文
posted @ 2014-08-25 17:19 棉花年度 阅读(190) 评论(0) 推荐(0) 编辑
摘要:模式说明访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。模式结构图程序示例说明:男人、女人被成功、失败‘访问’的反应代码:# -*- coding: cp936 -*-class Person: def Accept(se... 阅读全文
posted @ 2014-08-25 16:57 棉花年度 阅读(143) 评论(0) 推荐(0) 编辑
摘要:模式说明定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。模式结构图程序示例说明:泡茶与泡咖啡使用同一套流程代码:class Beverage(object): """description of class""" d... 阅读全文
posted @ 2014-08-25 16:50 棉花年度 阅读(139) 评论(0) 推荐(0) 编辑
摘要:模式说明定义算法家族并且分别封装,它们之间可以相互替换而不影响客户端。模式结构图程序示例说明:选择不同排序算法代码:class OrderStrategy(object): """sort base""" def Sort(self,*args): passclass Bu... 阅读全文
posted @ 2014-08-25 16:40 棉花年度 阅读(202) 评论(0) 推荐(0) 编辑
摘要:模式说明当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。模式结构图程序示例说明:程序员一天不同时刻的状态代码:import timeclass IState(object): def work(self): passclass Programer(obje... 阅读全文
posted @ 2014-08-25 16:32 棉花年度 阅读(110) 评论(0) 推荐(0) 编辑
摘要:模式说明定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者。模式结构图程序示例说明:两个观察者,得到同一个通知代码:class Subject(object): observers=[] info='' def __init__(s... 阅读全文
posted @ 2014-08-25 16:20 棉花年度 阅读(133) 评论(0) 推荐(0) 编辑
摘要:模式说明所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。模式结构图程序示例说明:游戏存档,恢复代码:class Memonto(object): _blood=0 _magic=0 def set... 阅读全文
posted @ 2014-08-25 16:15 棉花年度 阅读(261) 评论(0) 推荐(0) 编辑
摘要:模式说明所谓中介者模式就是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。模式结构图程序示例说明:房主、租客与中介代码:class Mediator(object): def sendmsg(self,msg,per... 阅读全文
posted @ 2014-08-25 15:55 棉花年度 阅读(144) 评论(0) 推荐(0) 编辑
摘要:模式说明将请求封装成对象,从而使可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。模式结构图程序示例说明:调用者是遥控器,接受者是电视代码:class TV(object): def open(self): print 'turn on tv' ... 阅读全文
posted @ 2014-08-25 15:31 棉花年度 阅读(110) 评论(0) 推荐(0) 编辑
摘要:模式说明避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止,这就是职责链模式。模式结构图程序示例说明:处理请假条,不同职位的领导处理不同天数的假条代码:class LeaveRequest(object): def... 阅读全文
posted @ 2014-08-25 15:21 棉花年度 阅读(156) 评论(0) 推荐(0) 编辑
摘要:模式说明所谓享元模式就是运行共享技术有效地支持大量细粒度对象的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。FlyweightFactory内定义的实体是不变的(共享的),传入参数是状态变化。缓存形式,传入参数已经被缓存则直接返回,否则创建参数对应实体,放入缓存并返... 阅读全文
posted @ 2014-08-25 15:12 棉花年度 阅读(157) 评论(0) 推荐(0) 编辑
摘要:模式说明所谓外观模式就是提供一个统一的接口,用来访问子系统中的一群接口。模式结构图程序示例说明:灯光、荧屏、空调、电视一键开启、关闭代码:class Light(object): def on(self): print 'light turn on' def off(sel... 阅读全文
posted @ 2014-08-25 14:52 棉花年度 阅读(175) 评论(0) 推荐(0) 编辑
摘要:模式说明所谓解释器(Interpreter)就是将一系列指令转化成代码,能够执行的代码。Interpreter本来就有翻译的意思。GoF给它的定义是:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。模式结构图程序示例说明:一个上下文类;一个解释器,两个... 阅读全文
posted @ 2014-08-23 16:16 棉花年度 阅读(392) 评论(0) 推荐(0) 编辑
摘要:模式说明组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(组合对象)具有一致性,它将对象组织到树结构中,可以用来描述整体与部分的关系。同时它也模糊了简单元素(叶 子对象)和复杂元素(容器对象)的概念,使得客户能够像处理简单元素一样来处理复杂元素... 阅读全文
posted @ 2014-08-23 16:08 棉花年度 阅读(173) 评论(0) 推荐(0) 编辑
摘要:模式说明桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。个人感觉,代理模式、适配器模式和桥接模式相类似,代理模式是一个代理对外表示一个特定的类,适配器模式相当于一个适配器代理多个类,... 阅读全文
posted @ 2014-08-23 15:48 棉花年度 阅读(294) 评论(0) 推荐(0) 编辑
摘要:模式说明代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。在代理模式中,“第三者”代理主要是起到一个中介的作用,它连接客户端和目标对象。模式结构图程序示例说明:男孩给女孩送礼物,通过她的闺蜜来代理完成代码: 1 class Girl(object): 2 def __ini... 阅读全文
posted @ 2014-08-23 15:40 棉花年度 阅读(206) 评论(0) 推荐(0) 编辑
摘要:模式说明适配器模式就是将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。在适配器模式中,我们可以定义一个包装类,包装不兼容接口的对象,这个包装类就是适配器,它所包装的对象就是适配者。适配器提供给客户需要的接口,适配器的实现就是将客户的请求转换成对适配者的相应的接口的... 阅读全文
posted @ 2014-08-23 14:47 棉花年度 阅读(177) 评论(0) 推荐(0) 编辑
摘要:单例模式在Python中可以查看这里借用里面一段话,说的相当明白:I don't really see the need, as a module with functions (and not a class) would serve well as a singleton. All its va... 阅读全文
posted @ 2014-08-23 12:47 棉花年度 阅读(259) 评论(0) 推荐(0) 编辑
摘要:模式说明所谓原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。说到复制,就会有深/浅两种复制,这是面向对象的值类型和引用类型的差异,具体不作说明模式结构图程序示例说明:无代码: 1 import copy 2 class WorkExp: 3 place="" 4 ... 阅读全文
posted @ 2014-08-23 12:30 棉花年度 阅读(182) 评论(0) 推荐(0) 编辑