摘要: 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数例如这样一组数3,3,1,2,4,2,5,5,4,其中只有1出现了1次,其他都是出现了2次,如何找出其中的1?最简便的方法是使用异或,代码如下:public class XOR { public static void mai... 阅读全文
posted @ 2014-06-23 18:01 廖凯林 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 设计模式六大原则(3):依赖倒置原则定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的... 阅读全文
posted @ 2014-06-23 17:51 廖凯林 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象... 阅读全文
posted @ 2014-06-23 17:44 廖凯林 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 设计模式六大原则(1):单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T... 阅读全文
posted @ 2014-06-23 17:32 廖凯林 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 1. 动态绑定的概念 指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法 . 例如:package org.demo.clone.demo;public class DynamicBound { public static void main(Stri... 阅读全文
posted @ 2014-06-23 17:20 廖凯林 阅读(1288) 评论(0) 推荐(1) 编辑
摘要: 1. 概念 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作2. 案例import java.util.ArrayList;import java.util.List;import java.util.Random;/** * * 声明接受哪一... 阅读全文
posted @ 2014-06-23 16:22 廖凯林 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤2. 案例 package org.demo.templatemethod.demo01;abstract class Template{ ... 阅读全文
posted @ 2014-06-23 15:25 廖凯林 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。 2. 案例 package org.demo.strategy.demo01;abstract class Strategy{ abstract public void m... 阅读全文
posted @ 2014-06-23 15:17 廖凯林 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。2. 案例 package org.demo.state.demo01;class Context{ private State state ; public Context(State state){ ... 阅读全文
posted @ 2014-06-23 15:11 廖凯林 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新2. 案例 package org.demo.observe.demo01;import java.util.ArrayList;import java.util.Iterator;import ... 阅读全文
posted @ 2014-06-23 14:59 廖凯林 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 1. 概念在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。管理角色:... 阅读全文
posted @ 2014-06-23 14:53 廖凯林 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 用一个中介对象封装一些列的对象交互2. 案例 实现下面的案例 类A和B,类中各有一个数字,要保证类B中的数字永远是类A中数字的100倍。即:当修改类A的数时,将这个数字乘以100赋给类B,而修改类B时,要将数除以100赋给类A。类A类B互相影响,就称为同事类 . 如果不使用中介者模式... 阅读全文
posted @ 2014-06-23 10:55 廖凯林 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。2. 该模式在jdk中的iterator接口中有体现 具体可以看看 http://www.cnblogs.com/liaokailin/p/3799058.html 阅读全文
posted @ 2014-06-23 10:19 廖凯林 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子2. 案例 package org.demo.interprerted.demo01;import java.util.ArrayList;import java.util.List;/** *... 阅读全文
posted @ 2014-06-23 10:12 廖凯林 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。2. 案例 package org.demo.command.demo01;/** * 将一个请求封装为一个对象, * 从而使你可用不同的请求对客户进行参数化; * 对请求... 阅读全文
posted @ 2014-06-23 10:09 廖凯林 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 1. 概念 使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系 2. 案例package org.demo.chainofresponsibility.demo;/** * 使多个对象都有机会处理请求, * 从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链, ... 阅读全文
posted @ 2014-06-23 10:03 廖凯林 阅读(245) 评论(0) 推荐(0) 编辑