工厂方法 (Factory Method) 创建型模式
摘要:概述:在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?意图:定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。实质: 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。在子类的内部创建对象通常比直接
阅读全文
posted @
2012-12-28 18:25
雇佣兵333
阅读(747)
推荐(0)
代理模式(Proxy Pattern) 结构型模式
摘要:概述: 在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。意图:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。实质: 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不..
阅读全文
posted @
2012-12-27 17:50
雇佣兵333
阅读(1244)
推荐(1)
汉诺塔递归与非递归算法
摘要:问题描述:在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片,一次只移动一片,不管在哪根针上,小片必在大片上面。当所有的金片都从梵天穿好的那根针上移到另外一概针上时,世界就将在一声霹雳中消灭,梵塔、庙宇和众生都将同归于尽。不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢?这里需要递归的方法。假设有n片,移动最少
阅读全文
posted @
2012-12-24 18:29
雇佣兵333
阅读(4940)
推荐(0)
最大间隙问题
摘要:问题描述: 最大间隙问题:给定n 个实数x1 , x2 , , xn,求这n 个数在实轴上相邻2 个数之间的最大差值。假设对任何实数的下取整函数耗时O(1),设计解最大间隙问题的线性时间算法。编程任务: 对于给定的n 个实数 x1 , x2, ……, xn,编程计算它们的最大间隙。数据样例: 输入数据: 5 2.3 3.1 7.5 1.5 6.3 输出数据: 3.2算法思想分析: 对于给定的n 个实数先取得其最大值和最小值,n个数的大小范围为[min,max];剩余n-2个点等分区间[min,max]产生n-1个闭区间的桶,如果我们假设每个桶的区间为[,)所以要增加一个桶放max...
阅读全文
posted @
2012-12-20 18:53
雇佣兵333
阅读(1599)
推荐(0)
装饰模式(Decorator) 结构型模式
摘要:概述:装饰模式又名包装(Wrapper)模式,是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。意图:动态方式给一个对象附加更多的功能。装饰模式可以在不创造更多的子类的情况下扩张对象的功能。动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活(为什么比继承要好,后面会讲到)。实现对客户端透明 (怎么实现,后面会讲到)实质: 实现对客户端透明的方式扩展对象的功能。使用场景:主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质(以继承的方式使某一类型要获得功能是在编译时是静态的,动态,是指在运行时),使得这种扩展方式缺乏灵活性;并且
阅读全文
posted @
2012-12-18 18:10
雇佣兵333
阅读(952)
推荐(1)
策略模式(Strategy) 对象的行为型模式
摘要:概述: 策略模式属于对象的行为模式(has-a, not is-a)。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。意图:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同
阅读全文
posted @
2012-12-17 18:38
雇佣兵333
阅读(1143)
推荐(2)
简单工厂模式(Simple Factory) 创建型模式
摘要:概述 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。意图 专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。工厂类负责根据一定的条件创建某一具体类的实例,客户端不参与创建具体产品,仅通过传入参数选择需要“消.
阅读全文
posted @
2012-12-14 18:31
雇佣兵333
阅读(301)
推荐(0)
单例模式(Singleton Pattern) 创建型模式
摘要:概述: Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责!意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。UML图:实质:有一个私有的无参构造函数,这可以防止其他...
阅读全文
posted @
2012-12-14 18:11
雇佣兵333
阅读(1008)
推荐(0)
字典序问题
摘要:在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A由26个小写英文字母组成,即A={a,b...z}.该字母表产生的长序字符串是指定字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次.例如,a,b,ab,bc,xyz,等字符串是升序字符串.现在对字母表A产生的所有长度不超过6的升序字符串按照字典排列编码如下:1 2 …… 26 27 28 ……a b …… z ab ac …… 对于任意长度不超过6的升序字符串,迅速计算出它在上述字典中的编码。上面公式可以这么理解:因为升序字符串,所以右边位上...
阅读全文
posted @
2012-12-13 15:20
雇佣兵333
阅读(558)
推荐(0)
统计数字问题
摘要:问题描述: 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。 编程任务: 给定表示书的总页码的10 进制整数n (1≤n) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。 分析与解答: 由0,1,2……9组成的所有的n位数,从n个0到n个9共有10^n个n位数,其中全排列的情况下,每个数字使用的次数一样,设为f(n). 0 0 0 0 ...... 00 0 0 0
阅读全文
posted @
2012-12-13 14:48
雇佣兵333
阅读(648)
推荐(1)