- 浏览: 72865 次
- 性别:
- 来自: 深圳
-
最新评论
-
tang52016639:
插。。。还真是顺序的问题,害我搞了大半天
poi的一个让人失望的bug -
dlheart:
放到bin里面?哪有bin目录?
poi的一个让人失望的bug -
smh821025:
veriolion 写道2008-12-02 12:03:15 ...
poi的一个让人失望的bug -
yadsun:
原来GEF中大量使用的是command模式
command命令模式 -
raisinmiao:
3.2也是同样的问题,上移即可解决。谢谢!
poi的一个让人失望的bug
文章列表
NULL Object空对象模式
- 博客分类:
- 设计模式
NULL Object空对象模式:当你在处理可能会出现null的对象时,可能要产生相对乏味的代码来做相应的处理,使用空对象模式可以接受null,并返回相应的信息。 空对象模式通常会作为一个单独的空对象类,封装一个默认的行为。
Interface Log{public void log();}
class FileLog extends Log{public void log(){}}
class ConsoleLog extends Log{public void log(){}}
class NullObjectLog extends Log{public void lo ...
- 2008-07-18 17:09
- 浏览 2588
- 评论(0)
proxy代理模式,其意图是"为其他对象提供一种代理以控制对这个对象的访问",通俗的讲就是,一个类A请一个代言人C去跟另一个类B打交道。在"四人帮"的《设计模式》中代理一章有关代理的"动机"的那节,举文档编辑器加载图像为例,说得很形象、透彻。
根据不同的用途,proxy代理模式又可以分为:远程代理、虚代理、访问控制(保护)代理、引用代理、审计代理、同步化代理、copy-on-write代理、缓存代理。 远程代理:提供访问远程对象的途径(RMI的应用)。 虚代理:由于创建目标对象的内存资源开销很 ...
- 2008-07-11 14:15
- 浏览 2117
- 评论(0)
visitor访问者模式的意图,在《设计模式》里这样描述:“表示一个作用于某个对象结构中的各元素的操作。它使可以在不改变各元素的类的前提下定义作用于这些元素的新操作。”。就是说:在坚持“开闭原则”的情况下,访问者可以用来扩展一个现有的类层次结构来实现新的行为。更通俗的讲,如果不愿意修改类层次结构内部代码或者类层次结构的代码难以修改的情况下,如果该类层次结构在设计实现时使用了visitor访问者模式,那么可以实现“在不修改类层次结构代码的前提下”进行扩展。
但是visitor访问者模式是一个有争议的模式,在《Design Paterns Java Workbook》(作者St ...
- 2008-07-06 18:23
- 浏览 922
- 评论(0)
command命令模式,将请求封装成对象,通过对象的形式来实现对请求的控制,例如排序、执行和取消等。 command命令模式也是一个遵循开闭原则的模式,避免了传统的if else的硬代码,又可以容易地把新的命令加入系统。 先声明一个公共接口,各个命令各自实现该接口。要使用该命令时,触发该命令或者向命令的使用者注册该命令,执行相应的方法即可。 使用javaSE5的新类型枚举(Enum),结合EnumMap(键-值方式存储)构造命令模式也是一个不错的选择,这样可以使代码更加简洁,清晰。 基本的代码框架:
public interface ...
- 2008-06-23 22:13
- 浏览 1327
- 评论(1)
template method模版方法模式,说白了,就是抽象类的运用。模版方法模式很多时候都在用,利用该模式可以实现提高代码的复用率。它把各子类相同的方法放在抽象类,避免了编写重复的代码,而其他可变的方法强制型地在各子类各自实现,实现代码规范性。 在我们使用的一些软件包的时候,有一些要求我们继承其某个类,并实现其方法,例如struts的Action,要求实现execute方法。原因是在Action内部定义了一个实现其功能的代码架构,用户不必做其他的事情,只要在继承并实现execute方法即可。这样做的目的是使得代码有规范性,简化代码,并达到方便用户使用的目的。
- 2008-06-23 17:49
- 浏览 1373
- 评论(1)
state状态模式,在代码的结构上跟策略模式没什么区别,只是它们的应用则重点不同。一个对象的行为依赖以一些状态的变化而随之变化,一种传统的做法就是if else的条件判定硬代码,这样的代码级不美观,也不好扩展维护。采用state状态模式就是把各个不同状态的所以执行的代码分别放到不同的类中。
- 2008-06-22 22:40
- 浏览 858
- 评论(0)
strategy策略模式,策略即算法,策略模式是对算法的封装,把使用算法的使用者和算法本身分割开,分派给不同的对象管理。一系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类或接口的实现类。换句话说:就是准备一组算法,当条件或环境变化,需要不同的算法时,则向算法的使用者注册该算法,使得其可以在使用者的内部使用该算法。 传统的作法,是使用if else语句在方法中实现并选择不同的算法(很多使用面向对象语言编写程序的人还是停留在结构化的思维定势),这与面向对象的开闭原则是不符的。在大量if else的代码环境下是比较难以维护排错的和扩展的,使用策略模式也可以提高代码复用 ...
- 2008-06-13 20:08
- 浏览 930
- 评论(0)
observer观察者模式,取名为观察者可能会让人费解,该模式的思想跟订阅/发布服务的思想是相近的,所以称为订阅/发布模式更为通俗贴切。 存在着这样的类:类A的某个状态发生改变,或者触发了某个事件,会影响到其他的n个类(一般是实现了相同的接口)的状态;或者n个类的某些状态是在某一时刻内“同时”发生的。一种不明智的作法就是,在类A中编写硬代码,如果n增加了,就要向类A添加相应的代码,并且这些代码会是跟前n-1次前添加的基本上是一样的。
public class Observable {
private ObserverA a;
private ObserverB b; ...
- 2008-06-11 10:50
- 浏览 965
- 评论(0)
用poi读取ws的ppt文件时,会抛出Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8的异常。(使用版本poi-3.0.2)。
解决办法是,打开项目的properties->java build path->order and export,发现poi放到了最后,把poi的包上移。问题解决!
上面的问题解决之后,再读取ws的word文件是,就会抛出java.lang.StringIndexOutOfBoundsException: Stri ...
- 2008-06-09 14:57
- 浏览 14622
- 评论(8)
memento备忘录模式,就是利用平常所说的备忘录的思想,把一些可能在以后要用到的东西先记起来,等到要用的时候就可以查询备忘录,再次利用。在软件设计中就是将对象的状态存储起来,根据需要,这个对象只要向备忘录发出一个请求就能够从备忘录读取数据并恢复到先前的状态。 既然是备忘录就会有一个或以上的信息来源,一条或以上的记录和一个记录集(记录管理)。需要存储信息的对象就是信息的来源。 因为隐私的原因,备忘录只有,记录人才能看到。同样的,备忘录对象必须对源发者之外的对象隐藏该原发者的内部变量的值。所以,在java中,记录类一般设计为内容类。 对于数据的储存方式,在&qu ...
- 2008-06-08 21:34
- 浏览 1391
- 评论(0)
mediator中介者模式,用来管理很多对象之间的相互作用,将一系列对象中对象之间传递消息的细节封装在一个独立的类中,从而减少这些对象之间直接交互所带来的复杂度,和集成测试的难度。
mediator中介者模式,是用在这种情况下的,有n个对象,他们之间形成了复杂的相互引用的关系,在最坏的情况下,可能形成了n*(n-1)/2的关系链,随着n的增大,n*(n-1)/2也就随之不断递增,从而就形成了一种高耦合的复杂结构。如果用一个调停者来管理这些对象之间相互作用带来的复杂关系,对象之间的交互通过调停者进行间接的传递消息,从而减少对象之间直接作用的复杂度,最终实现解耦的目的。 ...
interator迭代模式,学过数据结构的,都知道迭代是怎么一回事,最简单的链表也是用到迭代来一个一个地读取数据。利用迭代模式来读取一系列按一定规则来存储的数据,而你不必理会封装的数据存储的结构是怎么样的,一般都会提供一个叫next的函数,要读取数据,只要next个若干次就行了。
如果原本是对List编码的,但后来要修改为Set,如果你在读取元素的地方使用了Iterator,那么就不用修改此处的代码,这一点在《java编程思想》也提到了。
- 2008-05-31 10:13
- 浏览 2065
- 评论(0)
ChainOfResponsiblity责任链模式。 一系列对象之间的消息传递形成了线性的或循环的传递结构,例如A可以传给B,B可以传给C,C可以传给D……当条件不满足传递时,就停止传递。 例如,客户端对象发出一个请求给服务端处理,而客户端只知道服务端有n个服务对象可以对这个请求作出响应,但是客户端并不清楚哪个服务端对象是最合适处理这个请求的。最原始的处理方式,就是在客户端程序进行n个if else的语句判断。当服务端在添加一个服务处理对象时,便在客户端再添加一个if else,就这样如此循环不断的进行下去。 可见这样的代码的质量相当低劣,是如何的不高明,难以维护扩 ...
- 2008-05-27 17:04
- 浏览 1373
- 评论(0)
facade外观模式,简单明了的讲是,子系统封装聚集模式。facade外观模式遵循了迪米特法则,体现了松耦合原则。facade所面对的往往是多个类或其它程序单元,通过重新组合各类及程序单元,对外提供统一的接口,以便维护管理,减少复杂度和依赖性。 facade外观模式有点像数据库中视图的味道。在数据库中的视图对n个表的组合,客户端程序通过访问数据库的视图,而不必直接访问表,这样就减少了sql语句的编写,也可以减少很多代码量。如果数据的表万一有所改动,一般修改对应的视图就行了,如果要修改客户端程序,工作也不会很大。数据库的表之间的关系越复杂,越能体现这一点。 而在一个 ...
- 2008-05-25 00:36
- 浏览 1655
- 评论(0)
flyweight享元模式是实现对象的共享,减少重复数据的存储,从而减少内存分配的开销。享元模式融合了工厂模式和单例模式的思想,实际上也可以说享元模式是特殊的工厂模式。 如果要创建同个对象的n个实例,而通常这n个实例中的m个属性的值大部分或全部是相同的,那么最坏的情况就会有n*m个相同的数据占据了不同的内存空间,如果n*m的值较大的话,就可以考虑flyweight享元模式了。享元模式就把这m个相同的属性提取出来,结合单例模式和工厂模式,来实现相同属性值的实例分配到同一块内存空间(这样就只占用了1*m个内存空间了)。这m个属性通常叫内在信息,而其他会动态变化的信息叫外部信息 ...
- 2008-05-24 00:35
- 浏览 888
- 评论(0)