您的位置:首页 > 编程语言 > Java开发

java设计模式简介(2)

2009-12-03 10:12 281 查看
集合模式:
作用:处理由一些对象组成的组或者集合;处理如何组织类和对象来形成更大结构的细节;关注设计一个无冗余数据类的最有效方法;允许在一组对象构成的集合上定义操作。
1. 合成:允许单个对象合成对象以一种统一的方式被访问。换句话说,合成模式允许一个客户端对象以同样的方式对待单独的组件以及一组对象。
2. 迭代子:允许客户端以某种顺序访问一个容器(对象的集合或数据的集合)中的内容,而不需要知道该容器内部的内容是如何表示的。
3. 享元:将一个类中的固定不变的一般信息以及可变部分的信息分割成两个类,不变的信息设计成一个单独的对象(也就是享元对象),以节省内存空间,并节省建立一个对象实现的时间。
4. 访问者:允许在一些不同的对象之间定义某个操作,而不需要改变这些对象所属的类。
结构模式:
1. 作用:处理把责任委托给其他对象的对象,这样一来就会引入一种耦合度低的分层体系结构;在不同情况下方便对象间的通信,比如说某个对象通过通常的方式无法访问,或者由于接口不兼容导致某个对象不可用时;提供了组织一个聚合对象的方式,从而使其能完整地被创建,并且结构模式还提供了即使回收系统资源的方式。
2. 装饰器:用于动态地扩展一个对象的功能,而不需要改变原始的类代码或使用继承。这一点是通过在一个实际对象的外围创建一个称为装饰器的封装对象来做到的。它与继承最大的不同之处在于,它仅仅扩展对象的功能,而不会改变原来的类的功能。
3. 适配器:允许把一个类的接口转换成客户端希望的另一个接口,这样可以让具有不同接口的多个类一起工作。适配器模式建议在接口不相容的对象的周围定义一个封装类。这个封装类的对象就称为适配器,而它所封装的对象称为一个适配器源。适配器提供客户所期望的接口。适配器的接口实现将客户对象的调用转换为对适配源类接口的调用。注意:这里的接口不是java编程语言中的接口概念,而是指一个类对外显示的变成接口。这些接口将提供给其他类使用。
4. 责任链:避免一个请求的发送对象和接收对象的互相耦合。允许一个发送对象把它的请求传递给一串对象(对象链)处理,而且不必知道哪个对象最终将处理这个请求。
5. 外观:为一个由类组成的子系统提供了一个高层接口,使得这个子系统更易使用。外观也是一个类,它把客户对象所需要的子系统的功能简化到简单的接口上。
6. 代理:允许一个独立的对象被用作一个替代者以提供针对一个对象的受控访问,而通常方式下这个对象是不可访问的。代理对象和目标对象有同样的调用接口,它代替客户去和目标打交道,并负责处理和目标对象之间交流上的细节。这种情况下,客户对象不需要满足目标对象的特别需要就可以轻松的访问它所提供的服务。
代理类型:远程代理—提供访问远程对象(另一个地址空间里)的途径;虚代理—使得目标对象(尤其是特别消耗内存资源的目标对象)只有再用到的时候才被创建出来;缓存代理/服务代理—提供对目标对象的常见操作结果的保存,代理对象把这些结果保存起来,当客户对象发出同样的申请时,代理对象直接把自己保存的结果返回,而不去访问目标对象;防火墙代理—防止不良客户对目标对象的恶意访问,同样,也可以保护客户对象,防止他们访问有害的目标对象;保护代理—为不同的客户对象对目标的访问提供不同级别的访问控制;并行代理—允许不同的客户对象安全地并行问一个目标对象;引用代理:防止客户使用目标对象的过程中目标对象不小心被删除或者被释放,为了达到这一目标,代理会维护一个对目标对象的引用数目,只有当没有客户还在使用目标时才去删除它;审计代理—在执行目标对象的一个方法之前或者之后做一些审计的行为。
RMI简介:远程方法调用允许客户对象访问远程对象,就好像它们都在本地一样。
RMI组件:远程接口—声明了远程对象向客户对象提供的方法;远程对象—负责具体实现相应的远程接口中声明的方法;RMI注册表—提供对不同的远程对象的存储管理;客户—试图调用远程方法的应用对象;RMIC—Java RMI存根编译器,当远程对象被成功编译以后,就可以使用它为远程对象生成存根和骨架类,它们通过远程对象的类代码生成。



图一:RMI通信过程
7. 桥接:允许一个抽象接口和它的实现相分离。这样减少了两者的依赖关系,允许两者可以被独立修改。
8. 虚代理;以对对象的客户端对象保持透明的方式,延迟一个对象的创建,直到这个对象真正需要被创建时。虚代理模式能简化这种机制。它可以节省内存,使程序的启动速度很快。但是,因为无法确定一个应用对象是否已经创建,所以每次访问它的时候都要先做一次检查来确保它已经飞空,每次浪费在这个检查上的时间是一个很大的损失。
9. 审计代理:当有需要执行一些附加的操作时,比如在一个对象的方法被调用前后记录日志与记账,这个模式建议把附加功能封装在一个单独的对象中。
10. 聚合强制器:这个模式建议当一个聚合对象(一个对象包含其他对象作为它的成分)被实例化时,代表组成对象的成员变量也必须被实例化。换句话说,只要一个聚合对象被实例化时他必须得完全实例化。可以把成员声明为final类型,并在构造方法中就初始化,如果没有初始化,编译器将会给出错误,通过这个方法就能实现强制器。
11. 显示对象释放:这个模式建议当一个对象不再需要的时候,它所使用的外部资源应该被主动,及时地释放掉。通过finalize()方法和finally语句可以主动的释放外部资源。
12. 对象缓存器:当多个客户端对象调用同一个方法,第一次调用时把这个方法对象放入库中,接下来调用时,直接从库中取出结果返回给客户端。这样,对于客户端对象来说,调用就快多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: