
编程艺术
文章平均质量分 77
ponder008
这个作者很懒,什么都没留下…
展开
-
重构如何帮我改进我的代码?(以wxPython为例)
重构的目的是保持代码在以后易读和易于维护。转载 2010-12-06 15:44:00 · 925 阅读 · 0 评论 -
组合模式(python)
组合模式:针对“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。#encoding=utf-8##by panda#组合模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')#Component:公司抽象类class Company: name = ''原创 2011-10-25 09:19:04 · 2710 阅读 · 0 评论 -
迭代器模式(python)
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。python内置支持这种模式,所以一般来说,不用自己写,#encoding=utf-8##by panda#迭代器(Iterator)模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')#迭代器抽象类原创 2011-10-25 11:25:24 · 2147 阅读 · 0 评论 -
单例模式(python)
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现“某个类只有一个实例”途径:1、让一个全局变量使得一个对象被访问,但是它不能防止外部实例化多个对象。2、让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建。即单例模式。多线程时的单例模式:加锁——双重锁定。饿汉式单例类:在类被加载时就将自己实例化(静态初始化)。其优点是躲避了多线程访原创 2011-10-25 21:04:30 · 2625 阅读 · 0 评论 -
桥接模式(python)
桥接模式:将系统抽象部分与它的实现部分分离,使它们可以独立地变化。由于目标系统存在多个角度的分类,每一种分类都会有多种变化,那么就可以把多角度分离出来,让它们独立变化,减少它们之间的耦合。#encoding=utf-8##by panda#桥接模式def printInfo(info): print unicode(info, 'utf-8').encode('g原创 2011-10-26 18:21:50 · 3240 阅读 · 0 评论 -
设计模式的原则
一、单一职责原则判断:如果你能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的的职责。违背的代价:一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱这个类完成其它职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。二、开放-封闭原则定义:软件实体(类、模块、函数等等)对扩展是开放的,对更改是封闭的,即可以原创 2011-09-22 09:15:04 · 678 阅读 · 0 评论 -
命令模式(python)
命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;支持对请求排队、记录请求日志,以及可撤销的操作。优点:把请求一个操作的对象与知道怎么执行一个操作的对象分隔开。#encoding=utf-8##by panda#命令模式def printInfo(info): print unicode(info, 'utf-8').encode('原创 2011-10-26 19:35:14 · 3005 阅读 · 0 评论 -
职责链模式(python)
职责链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。#encoding=utf-8##by panda#职责连模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')#抽象职责类class Manager()原创 2011-10-27 20:27:27 · 2095 阅读 · 0 评论 -
中介者模式(python)
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。一般应用于一组对象以定义良好但是复杂的方式进行通信的场合。优点:降低了各个模块的耦合性。缺点:中介对象容易变得复杂和庞大。#encoding=utf-8##by panda#中介者模式def printInfo(info): p原创 2011-10-27 21:12:12 · 1694 阅读 · 0 评论 -
解释器模式(python)
解释器模式:给定一个语言,定义它文法的一种表示,并定义一个解释器。这个解释器使用该‘表示’来解释语言中的句子。应用场景:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。比如“正常表达式”。#encoding=utf-8##by panda#解释器模式def pr原创 2011-10-28 17:19:45 · 1464 阅读 · 0 评论 -
享元模式(python)
享元模式:运用共享技术有效地支持大量细粒度的对象。内部状态:享元对象中不会随环境改变而改变的共享部分。比如围棋棋子的颜色。外部状态:随环境改变而改变、不可以共享的状态就是外部状态。比如围棋棋子的位置。应用场景:程序中使用了大量的对象,如果删除对象的外部状态,可以用相对较少的共享对象取代很多组对象,就可以考虑使用享元模式。#encoding=utf-8##by panda#原创 2011-10-28 10:47:11 · 1896 阅读 · 0 评论 -
设计模式总结
创建型设计模式这类模式的特质是管理对象的创建过程。 通常设计总是以使用工厂方法开始,当设计者发现需要更大的灵活性时,设计会向其它创建型模式演化。 工厂方法模式单例模式抽象工厂方法模式建造者模式原型模式简单工厂模式结构型模式原创 2011-10-29 15:35:11 · 1172 阅读 · 0 评论 -
备忘录模式(python)
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。跟原型模式很像,不过在原型模式中保存对象的一切,而备忘录模式中只保存恢复时需要的数据。#encoding=utf-8##by panda#备忘录模式def printInfo(info): print unicode(info, 'u原创 2011-10-24 09:57:12 · 1906 阅读 · 0 评论 -
适配器模式(python)
适配器模式:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。应用场景:希望复用一些现存的类,但是接口又与复用环境要求不一致。分类:类适配器(通过多重继承)、对象适配器。#encoding=utf-8##by panda#适配器模式def printInfo(info): print unicode(inf原创 2011-10-22 16:44:29 · 3789 阅读 · 2 评论 -
状态模式(python)
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。应用场景:一个对象的行为取决于它的状态,即它必须在运行时刻根据状态改变它的行为。如果控制状态转换的条件表达式过于复杂,就可以考虑使用状态模式。关键点:把状态的判断逻辑转移到表示不同状态的一系原创 2011-10-19 10:58:56 · 3174 阅读 · 0 评论 -
装饰模式(python)
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。应用场景:适用于 "新加入的功能仅仅是为了满足一些只在某些特定情况下才会执行的需求“。优点:1、把类中的装饰功能从类中去除,简化原有的类。2、装饰模式把每个要装饰的功能放在单原创 2011-09-26 16:02:58 · 2250 阅读 · 0 评论 -
代理模式(python)
代理模式(Proxy):为某个对象提供一种代理以控制对这个对象的访问。注意:代理模式和策略模式的类图很相近,实现方法也是一样的,但是应用场景很不一样,体现了不同的思想。 策略模式中同一外部对象访问上下文对象的操作一样,但是里面的策略对象不同。 代理模式中不原创 2011-09-27 10:35:16 · 4891 阅读 · 1 评论 -
策略模式(实现柜台结账模块)
策略模式是一种定义一系列算法的方法,从概念上,所有这些算法完成的都是相同的工作,只是实现不同。所以可以实现context类,他可以以相同的方式调用所有的算法,减少了各类算法类与使用算法类之间之间的耦合。#encoding=utf-8##by panda#策略模式原创 2011-09-21 11:43:00 · 1519 阅读 · 0 评论 -
采用简单工厂模式实现计算器(python版)
工厂模式的核心:有这样一群类,他们区别很小,就像运算符类,他们的区别仅仅就是不同的运算符号。这样我们可以建一个工厂,按需“生产”出所需的所需要的类的实例。#encoding=utf-8##by panda#简单工厂模式class OperateBas原创 2011-09-20 10:06:27 · 2181 阅读 · 0 评论 -
模板方法模式(python)
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。因此模板方法使得子类可以在不改变一个算法的结构的情况下重新定义该算法的某些特定变量。优点:把不变行为搬移到超类,去除子类中的重复代码。#encoding=utf-8##by panda#模板方法原创 2011-10-11 10:38:18 · 4210 阅读 · 1 评论 -
外观(Facade)模式[python版]
外观(Facade)模式:为子系统中的一组接口提供一个一致的界面。——此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。与其它模式的区别:与 “简单工厂模式+策略模式”的组合版 很类似,不过外观类的接口不是简单的调用功能类的相应接口,而是封装成了新的接口。原创 2011-10-13 09:46:05 · 1806 阅读 · 0 评论 -
建造者模式(python实现)
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。相关模式:思路和模板方法模式很像,模板方法是封装算法流程,对某些细节,提供接口由子类修改,建造者模式更为高层一点,将所有细节都交由子类实现。代码:#encoding=utf-原创 2011-10-14 10:13:33 · 2014 阅读 · 0 评论 -
观察者模式(python版)
观察者模式:又叫发布-订阅模式。 它定义了一种一对多的依赖关系,让多个观察者对象同时鉴定某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。观察者模式所做的工作实际上就是解耦,根据“依赖倒转原则”,让耦合的双方都依赖于抽象,原创 2011-10-17 11:03:12 · 5072 阅读 · 0 评论 -
原型模式(python)
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式本质就是克隆对象,所以在对象初始化操作比较复杂的情况下,很实用,能大大降低耗时,提高性能,因为“不用重新初始化对象,而是动态地获得对象运行时的状态”。浅拷贝(Shallow Copy):原创 2011-10-10 10:30:32 · 3193 阅读 · 0 评论 -
工厂方法(python)
简单工厂模式的最大优点就是工厂类内部包含了必要的逻辑判断,客户端只要提供选择条件即可,这样客户端就不需要知道具体产品的信息了。但是每次增加产品就要修改工厂类,违背了“开放-封闭”原则。所以,有了工厂方法模式工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一原创 2011-10-09 13:23:37 · 5969 阅读 · 0 评论 -
抽象工厂模式(python版)
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。优点:易于交换“产品系列”,只要更改相应的工厂即可。缺点:建立产品的时候很繁琐,需要增加和修改很多东西。优化1:为了避免客户端有过多的逻辑判断,可以封装出一个简单工厂类来生成产品类。原创 2011-10-18 21:13:50 · 6535 阅读 · 2 评论 -
访问者模式(python)
访问者模式:表示一个作用于某对象结构中的各元素的操作。它可以使你在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定而基于该数据结构的操作需要经常扩展的系统。因为该模式的优点就是增加新的操作很容易。#encoding=utf-8##by panda#访问模式def printInfo(info): print unicode(info,原创 2011-10-29 12:49:36 · 2970 阅读 · 0 评论