- 博客(24)
- 资源 (7)
- 收藏
- 关注
原创 《java与模式》学习系列——备忘录模式
一、备忘录(Memento)模式结构备忘录对象是一个用来存储另外一个对象内部状态的快照(snapshot)的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来适合的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。其结构图如下:备忘录模式涉及三个角色:备忘录(Memento)角色、发起人(O
2011-06-29 19:56:00 2333
原创 《java与模式》学习系列——模版方法模式
一、模版方法(Template Method)模式用意:准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。模版方法模式是基于继承的代码复用的基本技术。模版方法模式与策略模式的区别:策略模式使用委派的方法提供不同的算法行为,而模式方法模式使用继承的方法提供不
2011-06-29 19:52:00 1910 2
原创 《java与模式》学习系列——策略模式
一、策略(Strategy)模式的结构图策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使他们可以互相替换,策略模式使得算法可以在不影响到客户端的情况下发生变化。其结构图如下:其中如果所有的具体策略类都有一些共有的行为,应当把这些公有的行为放到共同的抽象策略角色Strategy类里面。这时候抽象策略角色必须要用java抽象类实现。二、策略模式
2011-06-29 19:44:00 1154
原创 《java与模式》学习系列——代理模式
一、代理模式的结构代理模式给某一个对象提供一个代理对象,并有代理对象控制对原对象的引用。按照使用目的来划分有以下几种:远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使。虚拟(Virtual)代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。Co
2011-06-29 19:17:00 1424 2
原创 《java与模式》学习系列——合成模式
合成(Composite)模式的结构图合成模式是将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与符合元素同等看待。在如下情况下使用合成模式:1、需要描述对象的部分和整体的等级结构2、需要客户端忽略掉个体构件和组合构件的区别。客户端必须平等对待所有的构件,包括个体构件和组合构件。合成模式有两种形式,分别为安全式和透明式透明式在Compon
2011-06-29 19:12:00 1374
原创 《java与模式》学习系列——原始模型模式
一、原始 (Prototype)模式结构图通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多的对象。原始模型模式有两种表现形式:第一种是简单形式,第二种是登记形式。简单形式结构图如下:登记形式:两种形式比较:如果创建的原型对象数目较少而且比较固定的话,可以采取简单形式的原始模型模式。如果创建的原型对象数目不固定的话,可以采取
2011-06-29 19:02:00 1818
原创 《java与模式》学习系列——建造者模式
一、建造(Builder)模式结构图建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造者零件的责任分割分开,达到责任划分和封装的目的。建造模式利用一个导演者对象和具体建造者对象一个一个的建造出所有零件,从而建造出完整的产品对象。结构图如下:二、建造模式在java中的应用JavaMail中的建造模式JavaMail是
2011-06-29 19:00:00 1866
原创 《java与模式》学习系列——调停者模式
一、调停者(Mediator)模式的结构调停者模式包装了一系列对象相互作用的方式,使得这些对象不必互相明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。在调停者模式中,所有的成员对象都可以协调工作,但是又不直接相互管理。这些对象都与一个处于中心地位的调停者对象发生紧
2011-06-29 17:41:00 1654
原创 《java与模式》学习系列——解释器模式
一、解释器(Interpreter)模式的结构解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。结构所下图所示:解释器不一定要有一个浏览器(Parser),但是使用浏览器仍然是最常见的建立解释器的办法。一个浏览器可以从一个文件或命令行读入文字性命令,并创建解释器。二、解释器模式与其他模式的关系合成模式被解释
2011-06-29 17:17:00 1066
原创 《java与模式》学习系列——访问者模式
一、访问者(Visitor)模式的结构访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。根据对象的类型而对方法进行的选择称为分派(Dispatch)。一个方法所属的对象叫做方法的接收者,方法的接收者与方法的参量统称做方法的宗量。根据分派可以基于多少种宗量
2011-06-29 17:11:00 1187
原创 《java与模式》学习系列——状态模式
一、状态(State)模式的结构状态模式允许一个对象在其内部状态改变的时候改变其行为。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为随之改变。结构如下图所示:通过使用多态性原则,可以动态地改变环境类Context的属性State的内容,使其从指向一个具体状态类变换到指向
2011-06-29 17:00:00 984
原创 《java与模式》学习系列——命令模式
一、命令(Command)模式的结构命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式类似C语言的回调。因为java不支持函数指针,所以命令模式可以达到同样的目的。结构图如下图所示:
2011-06-29 16:49:00 997
原创 《java与模式》学习系列——责任链模式
一、责任链(Chain ofResponsibility)模式的结构在责任链模式里,很多对象由每一个对象对其下家的引用而链接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。如下图所示:代码如下 ://Handler类
2011-06-29 16:46:00 984
原创 《java与模式》学习系列——迭代子模式
一、迭代子(Iterator)模式的结构迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。所下图所示:迭代子可分为外禀迭代子和内禀迭代子。外禀迭代子适合于白箱聚集(白箱聚集就是向外界提供访问自己内部元素接口的聚集),由于迭代的逻辑是由聚集对象本身提供的,所以这样的外禀迭代子角色往往仅仅保持迭代的游标位置。所以具体迭代子角色是一个外部类,它的构造函数接受一个具
2011-06-29 16:43:00 1560
原创 《java与模式》学习系列——观察者模式
一、观察者(Observer)模式的结构观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。结构如下图所示:二、观察模式在java中的应用java语言对观察者模式的支持在java语言的java.util库里面,提供了一个Observable类以及一个Observ
2011-06-29 16:41:00 1382
原创 《java与模式》学习系列——桥梁模式
一、桥梁(Bridge)模式的结构桥梁模式的用意是在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系(继承是一种强耦合),从而使两者可以相对独立地变化。桥梁模式是用聚合关系实现的弱耦合解决方案。结构图如下:二、桥梁模式在java中的应用AWT的Peer架构Java为AWT中的每一个GUI构件都提供了一个Peer构件,这个Peer构件是所属的Java构件
2011-06-29 15:43:00 1542
原创 《java与模式》学习系列——门面模式
一、门面模式的结构外部与一个子系统的通信必须通过一个统一的门面对象进行,这就是门面模式。如下图所示:在门面模式中,通常只需要一个门面类,并且此门面类只有一个实例,换言之它是一个单例类。当然这并不意味着在整个系统里只有一个门面类,而仅仅是说对每一个子系统只有一个门面类。二、什么情况下使用门面模式1、为一个复杂子系统提供一个简单接口2、子系统的独立性,引入Façade
2011-06-29 15:34:00 1325
原创 《java与模式》学习系列——享元模式
一、享元(Flyweight)模式的结构享元模式是对象的结构模式,享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External State)。一个内蕴状态是存储在享元对象内部的,并且是不会随环境改变而有所不同的。因此,一个享元可以具有内蕴状态并可以共享。一个外蕴状态是随环境改变而改变的、不可
2011-06-29 15:31:00 1037
原创 《java与模式》学习系列——装饰模式
一、装饰(Decorator)模式的结构装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式有透明和半透明的两种,这两种的区别就在于装饰角色的接口与抽象构件角色的接口是完全一致。半透明情况下装饰角色的接口比抽象构件角色的接口宽。所下图所示:如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decorator类,而可以把
2011-06-29 15:27:00 1044
原创 《java与模式》学习系列——适配器模式
一、适配器模式的结构适配器模式(Adapter Pattern)把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式有类的适配器模式和对象的适配器模式两种形式。类的适配器模式如下图所示:对象的适配器模式结构如下:适配器模式的用意是将接口不同而功能相同或相近的两个接口加以转换,这里面包括适配器角色补充了一
2011-06-29 15:21:00 1254
转载 找出数组中两个只出现一次的数字
转自:http://blog.csdn.net/ewanyou/archive/2011/05/25/6445209.aspxhttp://www.cnblogs.com/aLittleBitCool/archive/2011/04/14/2015720.html问题描述:一个数组中除了两个数字之外,其余数字均出现了两次(或偶数次)。请写出程序查找出这两个只出现一次的数字,要求时间复
2011-06-23 15:44:00 1418
转载 UML中类之间的关系
转自:http://www.uml.org.cn/oobject/200911174.asp如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而
2011-06-09 19:25:00 762
原创 《java与模式》学习系列——单例模式
<br /> <br />一、单例模式的结构<br />单例模式有三个要点:<br />一是某个类只能有一个实例;<br />二是它必须自行创建这个事例;<br />三是它必须自行向整个系统提供这个实例。<br /> <br />饿汉式单例类<br />源代码如下:<br />public class EagerSingleton{ private static final EagerSingleton m_instance = new EagerSingleton();
2011-06-01 20:56:00 703
原创 《java与模式》学习系列——抽象工厂模式
<br /> <br />一、抽象工厂模式的结构<br />所下图所示:<br /><br /><br />适用情况:<br />1、一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。<br />2、这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品(上面这一条叫做抽象工厂的原始用意)<br />3、同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。<br />4、系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客
2011-06-01 12:10:00 926
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人