快速业务通道

Java中的模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
以及一定程度上的自由度,尽可能减小错误使用的可能。

对环境敏感的设计。在空间或者时间上分离方法的执行--例如,线程,远程方法调用,消息队列--能够对设计的正确性和效率产生意义深远的影响。这种分离带来的结果是不可忽视的:并发引入了不确定性和环境选择的开销;分布引入了错误的和不断增加的回程的调用开销。这些是设计的问题,而不是修改bug那样简单。

无论是在何种情况下,结果都是将会阻碍所有权风格的程序设计(Property-Style Programming)--当一个接口主要由set和get方法组成的时候,每个方法都相应的直接指向私有区域。这样的类的封装很差(意思是毫无遮掩)。接口中的域访问器(Field accessors)通常是不会提供信息的:他们在对象的使用中不能通讯、简单化和抽象化,这通常会导致冗长并易出现错误的代码。所有权风格的程序设计在短时间内不是一个大的活动。分布和并行通过引入了正确性和严重的性能开销放大了这些格式上实践的问题。

透明度和bug灾难。抽象允许我们在必要的时候可以忽略细节,所以我们的设计思想可以平衡环境的因素而不是受制于它们。决定什么样的细节可以忽略便成为一个挑战。问题的严重性在重要的细节别忽略的情况下上升了。

设计往往会尽量使环境因素尽可能的透明。透明能够成为一个诱人的主意:也许它可以让线程和远程对象通讯完全透明,这样用户在进行对象通讯的时候什么也不会觉察到。Proxy模式支持一定程度上的透明度。这加强了RMI和COBRA的基础。本地的代理的对象和使用远程的对象在使用中具有相同的接口,并且编组上的细节允许调用着使用熟悉的方法来调用模型。然而,这种分布透明并不完全:失误和潜在的影响,不能被完全隐藏并且需要考虑。毕竟透明不是毛巾。

Java中的模式(2)

时间:2010-07-19

Command-Query Separation

保证一个方法是不命令(Command)就是查询(Query)

问题。方法,当它们返回一个值来回应一个问题的时候,具有查询的性质,当它们采取强制行动来的改变对象的状态的时候,具有命令的属性。所以一个方法可以是纯的Command模式或者是纯的Query模式,或者是这两者的混合体。

例如,在java.util.Iterator中,hasNext可以被看作一种查询,remove是一种命令,next和awkward合并了命令和查询:

public interface Iterator { boolean hasNext(); Object next(); void remove(); }

如果不将一个Iterator对象的当前值向前到下一个的话,就不能够查询一个Iterator对象。这导致了一个初始化(initialization)、增加(continuation)、访问(access)和前进(advance)分离而清晰定义的循环结构的错位:

for(initialization; continuation condition; advance) { ... access for use ... }

将Command和Query功能合并入一个方法的的结果是降低了清晰性。这可能阻碍基于断言的程序设计并且需要一个变量来保存查询结果:

for(Iterator iterator = collection.iterator(); iterator.hasNext();) { Object current = iterator.next(); ... use current... ... again use current... }

解决方案。保证方法的行为严格的是命令或者是查询,这样可以返回值的方法是纯的函数而没有复效应(side effects),有负效应的方法不可能有返回值。"另一个表述这点的方法是问一个问题而不影响到答案。"

Combined Method

组合方法经常一起被使用在线程和分布环境中来保证正确性并改善效率。

问题。一些主要提供密集的方法的接口,起初,看来是最小化和附着性强的--都是吸引人的特点。然而,在使用的过程中,一些接口显现得过于原始。它们过于简单化,从而迫使类用户用更多的工作来实现普通的的任并操纵方法之间的依赖性(暂时耦合)。这是非常麻烦并且容易出错的,导致了代码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号