代码改变世界

随笔档案-2015年08月

迭代子模式(Iterator)

2015-08-27 20:29 by 你吃不吃麦芽糖, 271 阅读, 收藏,
摘要: 迭代子(Iterator)模式又叫游标模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。迭代子模式涉及到以下几个角色:抽象迭代子(Iterator)角色:此抽象角色定义出遍历元素所需的接口。具体迭代子(ConcreteIterator)角色:此角色实现了Ite... 阅读全文

Java对观察者模式的支持

2015-08-26 23:19 by 你吃不吃麦芽糖, 242 阅读, 收藏,
摘要: 在Java语言的Java.util库里面,提供了一个observable类以及一个observer接口,构成Java语言对观察者模式的支持。下面直接看如何使用Java对观察者模式的支持:在下面的例子里,被观察者对象叫做watched,也就是被监视着;而观察者对象叫做watcher,也就是监视人的意思... 阅读全文

观察者模式(Observer)

2015-08-26 20:11 by 你吃不吃麦芽糖, 230 阅读, 收藏,
摘要: 观察者模式是对象的行为模式,又叫做发布-订阅模式、源-监听器模式或者从属者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听同一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。下面给出一个简单的示意性系统,在该系统中有如下几个角色:抽象主题... 阅读全文

模板方法模式(Template Method)

2015-08-26 17:11 by 你吃不吃麦芽糖, 365 阅读, 收藏,
摘要: 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造子的行为实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法。下面考虑一个计算存款利息的例子。假设系统需要支持两种存款账号,即货币市场(... 阅读全文

策略模式(Strategy)

2015-08-26 09:41 by 你吃不吃麦芽糖, 216 阅读, 收藏,
摘要: 策略模式是对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立地类中,从而使得它们可以自由的相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式是对算法的包装,是把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列... 阅读全文

桥梁模式案例 八戒“转世投胎”的故事

2015-08-25 18:15 by 你吃不吃麦芽糖, 261 阅读, 收藏,
摘要: 本节从桥梁模式的观点出发,讨论《西游记》中天蓬元帅转世投胎成猪八戒的故事。如果存在灵魂的话,应当是抽象化角色,而肉体则是实现化角色。肉体为灵魂的功能提供了实现,就像具体Java类为抽象Java类提供了实现一样。“转世投胎”系统的UML类图:可以看出,“转世投胎”机制将尘世划分为两个等级结构:第一个等... 阅读全文

桥梁模式

2015-08-25 17:43 by 你吃不吃麦芽糖, 346 阅读, 收藏,
摘要: 桥梁模式的用意是“将抽象化与实现化脱耦,使得二者可以独立地变化”。所谓强关联,就是在编译时期已经确定的,无法在运行时期动态改变的关联;所谓弱关联,就是可以动态地确定并且可以在运行时期动态的改变的关联。在Java语言中,继承关系是强关联,而聚合关系是弱关联。桥梁模式所涉及的角色有:抽象化(Abstra... 阅读全文

门面模式(Facade)

2015-08-24 19:57 by 你吃不吃麦芽糖, 126 阅读, 收藏,
摘要: 现代的软件系统都是比较复杂的,设计模式的任务就是协助设计师处理复杂系统的设计。门面模式是对象的结构模式。外部与一个子系统的通信必须通过一个统一的门面对象进行,这就是门面模式。 阅读全文

代理模式(Proxy)

2015-08-24 17:52 by 你吃不吃麦芽糖, 195 阅读, 收藏,
摘要: 代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理模式的一个极其简单的例子,但是它具有代理模式所要求的功能,设计师可以使用这个例子作为蓝本,在一个Vector(或者任何其他对象)被调用之前和之后做出有意义的操作。实现代码如下:import java.... 阅读全文

java IO

2015-08-23 10:51 by 你吃不吃麦芽糖, 145 阅读, 收藏,
摘要: JAVA I/O 库的两个对称性Java I/O库具有两个对称性,它们分别是:输出-输入对称:比如InputStream和OutputStream各自占据Byte流的输入和输出的两个平行的等级结构的根部;而Reader和Writer各自占据Char流的输入与输出的两个平行的等级结构的根部。byte-... 阅读全文

对文件的不同部分进行加锁处理

2015-08-22 11:17 by 你吃不吃麦芽糖, 170 阅读, 收藏,
摘要: 对文件进行切片,分别操作不同的部分//: io/LockingMappedFiles.java// Locking portions of a mapped file.// {RunByHand}import java.nio.*;import java.nio.channels.*;import ... 阅读全文

测试某个方法运行时间的模板

2015-08-22 10:49 by 你吃不吃麦芽糖, 147 阅读, 收藏,
摘要: //: io/MappedIO.javaimport java.nio.*;import java.nio.channels.*;import java.io.*;public class MappedIO { private static int numOfInts = 4000000; pr... 阅读全文

Java io 小工具类

2015-08-21 14:55 by 你吃不吃麦芽糖, 191 阅读, 收藏,
摘要: 该类用于读写文件,文本文件//: net/mindview/util/TextFile.java// Static functions for reading and writing text files as// a single string, and treating a file as an... 阅读全文

装饰模式

2015-08-20 10:23 by 你吃不吃麦芽糖, 249 阅读, 收藏,
摘要: 装饰模式又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式以对客户端透明的方式动态的给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。装饰模式的关键在于这种功能... 阅读全文

合成模式

2015-08-15 00:57 by 你吃不吃麦芽糖, 231 阅读, 收藏,
摘要: 合成模式属于对象的结构模式,又叫做部分-整体模式。PC的文件系统也是典型的合成模式。文件夹中可以有文件和文件夹。。。。道士的故事:从前有个山,从前有个庙,从前有个道士讲故事。讲的啥故事?从前有个山,从前有个庙,从前有个道士讲故事。讲的啥故事?从前有个山......。在这个故事里有山,有庙,有道士,有... 阅读全文

字符串的编辑距离

2015-08-12 16:04 by 你吃不吃麦芽糖, 228 阅读, 收藏,
摘要: 字符串的相似度定义为:将一个字符串转换成另外一个字符串时需要付出的代价。转换可以采用插入、删除和替换三种编辑方式,因此转换的代价就是对字符串的编辑次数。作为对比采用两种方式:递归算法和动态规划算法朴素递归方式实现:朴素递归方式很清晰,很简洁,但是时间复杂度很高public static int ed... 阅读全文

把xml文件转成properties类型----适配器模式的应用

2015-08-12 02:10 by 你吃不吃麦芽糖, 1251 阅读, 收藏,
摘要: 本项目的目的是使用适配器模式将DocumentHandler的接口适配成Java.util.Properties的接口。采用的是对象的适配器模式。XMLproperties是一个继承自Java.util.Properties的对象,并委派一个DocumentHandler类型的对象。本项目需要两个类... 阅读全文

缺省适配模式

2015-08-11 21:06 by 你吃不吃麦芽糖, 446 阅读, 收藏,
摘要: 缺省适配模式是为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。在很多情况下,必须让一个具体类实现某一个接口,但是这个类又用不到接口所规定的所有的方法。通常的处理方法是,这个具体类要实现的所有的方法,那些有用的方法要实现,那些没用的方法也要有空的、平庸的实现。例... 阅读全文

适配器模式(Adapter)

2015-08-11 20:36 by 你吃不吃麦芽糖, 420 阅读, 收藏,
摘要: 适配器模式是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的一个示例:请做一个kittie的具体类,并实现miao()、catchRat()、run()、sleep()等方法。再做一个puppie的接口,要求有wao()、fet... 阅读全文

原始模型模式

2015-08-11 03:19 by 你吃不吃麦芽糖, 198 阅读, 收藏,
摘要: 原始模型模式属于对象的创建模式。通过给出一个原始对象来致命所要创建的对象的类型,然后用复制这个原始对象的办法来创建出更多同类型的对象。从孙大圣的手段谈起:悟空可以用猴毛根据自己的形象,复制出很多“身外之身”来。老孙的这种手段在面向对象的设计领域里叫做原始模型模式。下面看一下,实现大圣自我复制的浅拷贝... 阅读全文

Java对象的深复制----利用串行化进行深复制

2015-08-11 01:51 by 你吃不吃麦芽糖, 258 阅读, 收藏,
摘要: 把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序圈里又非常形象地称为“冷冻”或者“腌咸菜”过程;而把对象从流中读出来的并行化(Deserialization)过程则叫做“解冻”或者“回鲜”过程。应当指出的是,写到流里的是对象的一个拷贝,而原来对象仍然存在于JVM里面,... 阅读全文

一个发送邮件的例子------建造模式的应用

2015-08-10 19:11 by 你吃不吃麦芽糖, 478 阅读, 收藏,
摘要: 假设有一个Java建造的电子杂志系统,定期地向用户的电子邮件信箱发送电子杂志。用户可以通过网页订阅电子杂志,也可以通过网页停止订阅。当用户开始订阅时,系统发送一个电子邮件表示欢迎,当用户结束订阅时,系统发送一个电子邮件表示欢送。本例子就是这个系统负责发送“欢迎”和“欢送”邮件的模块。在本例中,产品类... 阅读全文

建造模式(Builder)

2015-08-10 17:27 by 你吃不吃麦芽糖, 159 阅读, 收藏,
摘要: 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。产品的内部表象 一个产品常有不同的组成成分作为产品的零件。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址得到... 阅读全文

序列键生成器之多例模式实现

2015-08-10 03:37 by 你吃不吃麦芽糖, 132 阅读, 收藏,
摘要: public class MutilKeyGenerator { private static HashMap keys=new HashMap(); private static final int POOL_SIZE=20; private KeyInfo keyInfo=null; priva... 阅读全文

序列键生成器之单例模式实现

2015-08-10 03:36 by 你吃不吃麦芽糖, 137 阅读, 收藏,
摘要: public class KeyGenerator { private static KeyGenerator keygen=new KeyGenerator(); private static final int POOL_SIZE=20; private HashMap keyList=new ... 阅读全文

单例模式(singleton)

2015-08-09 21:29 by 你吃不吃麦芽糖, 183 阅读, 收藏,
摘要: 单例模式有以下几个特点:单例类只能有一个实例单例类必须自己创建自己的唯一的实例单例类必须给其他所有其他对象提供这个实例饿汉式单例模式:由于构造函数是私有类型,因此此类不可继承public class EagerSingleton { private static final EagerSinglet... 阅读全文

工厂模式之抽象工厂模式

2015-08-09 01:34 by 你吃不吃麦芽糖, 182 阅读, 收藏,
摘要: 前面介绍了简单工厂模式和工厂方法模式,前面两种模式都适用于只有一种产品等级结构的情形。也即只有一个抽象的产品接口public interface Product {}的情况。例如一个水果农场,只需一个抽象的水果接口作为具体的产品抽象即可。而抽象工厂模式适用于有多个产品等级结构的情形,例如该农场扩大规... 阅读全文

工厂模式之工厂方法模式

2015-08-04 18:14 by 你吃不吃麦芽糖, 210 阅读, 收藏,
摘要: 工厂方法模式是简单工厂模式的进一步抽象和推广。工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在该模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做。核心工厂类变成了一个抽象工厂角色,这种进一步的抽象允许系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式的... 阅读全文

工厂模式之简单工厂模式

2015-08-04 16:47 by 你吃不吃麦芽糖, 168 阅读, 收藏,
摘要: 设计模式的目的其实就是封装,让客户端调用起来方便,同时让系统维护起来方便。今天记录一下对工厂模式的理解。工厂模式专门负责将大量有共同接口的类实例化。工厂模式有以下几种形态: 1、简单工厂模式(Simple Factory):又称静态工厂方法模式(Static Factory Method Patte... 阅读全文