ivaneeo's blog
自由的力量,自由的生活。
BlogJava
::
首页
::
联系
::
聚合
::
管理
669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(30)
给我留言
查看公开留言
查看私人留言
我参与的团队
随笔分类
Android--机器人的威力(1)
bi(商务智能)(5)
C-自由的灵魂(10)
debian-企鹅中最像牛(29)
emacs-牛露锋芒(39)
english-英文(25)
erlang-分布式语言(6)
flex-我酷所以我在(5)
freebsd魔力(9)
gcc小试牛力(13)
GNU牛力(138)
java魔力(76)
lua-撸语言(3)
oralce-为什么这么强大(8)
perl-杀鸡就要用牛刀(14)
qt-革命(1)
refactoring-从地狱中重生(149)
ruby-宝石也锋芒(22)
scala-fun!(4)
scheme-语言之母(8)
tip(33)
web2.0(3)
云(47)
互联网(15)
可爱的python(2)
物联网(4)
随笔档案
2015年7月 (2)
2015年6月 (1)
2015年5月 (1)
2015年4月 (10)
2015年3月 (10)
2015年2月 (5)
2015年1月 (4)
2014年12月 (20)
2014年11月 (10)
2014年10月 (3)
2014年9月 (3)
2014年8月 (1)
2014年7月 (1)
2014年6月 (1)
2014年5月 (2)
2014年4月 (4)
2014年3月 (8)
2014年2月 (2)
2013年12月 (5)
2013年11月 (3)
2013年10月 (4)
2013年9月 (2)
2013年8月 (2)
2013年6月 (2)
2013年5月 (3)
2013年4月 (1)
2012年12月 (3)
2012年11月 (2)
2012年10月 (1)
2012年6月 (1)
2012年4月 (3)
2012年3月 (1)
2012年2月 (8)
2011年12月 (6)
2011年11月 (1)
2011年10月 (6)
2011年9月 (4)
2011年8月 (3)
2011年7月 (3)
2011年6月 (14)
2011年5月 (6)
2011年4月 (3)
2011年3月 (2)
2011年2月 (4)
2011年1月 (20)
2010年12月 (9)
2010年10月 (4)
2009年10月 (4)
2009年4月 (1)
2008年12月 (2)
2007年10月 (1)
2007年4月 (3)
2007年2月 (5)
2006年11月 (10)
2006年10月 (4)
2006年9月 (21)
2006年7月 (7)
2006年5月 (1)
2006年4月 (18)
2006年3月 (5)
2006年2月 (10)
2006年1月 (8)
2005年12月 (14)
2005年11月 (46)
2005年10月 (16)
2005年9月 (59)
2005年8月 (220)
搜索
最新评论
1. re: 在windows下使用Xming+Putty显示Linux下软件图形界面
好好好,这样做确实成功了。包括那个错误处理!
--WFC
2. re: Hive与HBase的整合[未登录]
hive集成hbase数据同步过程中如果出现异常,会是什么结果? 例如往hive的表中插入100w记录,往hbase同步的到一半的时候出现一个异常,会回滚掉所有hive的更新以及hbase的更新吗
--bill
3. re: Flex组件IFrame中嵌入HTML页面的方法
12123
--12
4. re: Cloudera Impala TarBall 编译、安装与配置
评论内容较长,点击标题查看
--laoyang
5. re: 在windows下使用Xming+Putty显示Linux下软件图形界面
很好的分享,对我很有帮助。
--LVST
阅读排行榜
1. elasticsearch安装配置及中文分词(16742)
2. vim中显示16进制的值(16733)
3. windows xp cdkey(14423)
4. 在windows下使用Xming+Putty显示Linux下软件图形界面(13164)
5. Nginx配置SSL证书部署HTTPS网站(11385)
评论排行榜
1. GNOME VS KDE(14)
2. windows xp cdkey(7)
3. FVWM Beginners Guide(4)
4. vim中显示16进制的值(3)
5. powerdesigner 导入Excel文档 做成 实体表(3)
#
重构二--在对象之间搬移特性(Introduce Foreign Method)(3)--作法
作法
(Mechanics)
在client class中建立一个函数,用来提供你需要的功能。
==》这个函数不应该取用client class的任何特性。如果它需要一个值,把该值当作参数传给它。
以server class实体作为该函数的第一个参数。
将该函数注释为:[外加函数(foreign method),应在server class实现。]
==》这么一来,将来如果有机会将外加函数搬移到server class中,你便可以轻松找出这些外加函数。
posted @
2005-08-31 14:21
ivaneeo 阅读(250) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Introduce Foreign Method)(2)--动机
动机
(Motivation)
进行本项重构时,如果你以外加函数实现一项功能,那就是一个明确信号;这个函数原本应该在提供服务的(server) class中加以实现。
如果你发现自己为一个server class建立了大量外加函数,或如果你发现有许多classes都需要同样的外加函数,你就不应该再使用本项重构,而应该使用
Introduce Local Extensiong
(164)。
posted @
2005-08-31 14:15
ivaneeo 阅读(164) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Introduce Foreign Method)(1)
你所使用的server class需要一个额外函数,但你无法修改这个class。
在client class中建立一个函数,并以一个server class实体作为第一引数(argument)。
Date newStart = new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);
Date newStart = nextDay(previousEnd);
private static Date nextDay(Date arg) {
return new Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1);
}
posted @
2005-08-31 14:09
ivaneeo 阅读(159) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Remove Middle Man)(4)--范例
范例
(Examples)
上一项重构结束时,Person将Department隐藏起来了:
class Person...
Department _department;
public Person getManager() {
return _department.getManager();
}
class Department...
private Person _manager;
public Department(Person manager) {
_manager = manager;
}
为了找出某人的经理,客户代码可能这样写:
manager = john.getManager();
首先在Person中建立一个[受托对象(delegate)取得函数]:
manager = john.getDepartment.getManager();
然后逐一处理每个委托函数。
为方便起见,我也可能想要保留一部分委托关系(delegations)。此外我也可能希望对某些客户隐藏委托关系,并让另一些用户直接使用受托对象。
posted @
2005-08-31 14:03
ivaneeo 阅读(207) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Remove Middle Man)(3)--作法
作法
(Mechanics)
建立一个函数,用以取用delegate(受托对象)。
对于每个委托函数(delegate method),在server中删除该函数,并将[客户对该函数的调用]替换为[对delegate(受托对象)的调用]。
处理每个委托函数后,编译、测试。
posted @
2005-08-31 13:54
ivaneeo 阅读(135) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Remove Middle Man)(2)--动机
动机
(Motivation)
在
Hide Delegate
(157)的[动机]栏,我谈到了[封 装delegated object(受托对象)]的好处。但是这层封装也是要付出代价的,它的代价就是:每当客户要使用delegate(受托类)的新特性时,你就必须在 server端添加一个简单委托函数。随着delegate的特性(功能)越来越多,这一过程会让你痛苦不已。server完全变成了一个[中间人],此 时你就应该让客户直接调用delegate。
posted @
2005-08-31 13:51
ivaneeo 阅读(129) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Remove Middle Man)(1)
某个class做了过多的简单委托动作(simple delegation)。
让客户直接调用delegate(受托类)。
posted @
2005-08-31 13:45
ivaneeo 阅读(169) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Hide Delegate)(4)--范例
范例
(Examples)
本例从两个classes开始,代表[人]的Person和代表[部门]的Department:
class Person {
Department _department;
public Department getDepartment() {
return _department;
}
public void setDepartment(Department arg) {
_department = arg;
}
}
class Department {
private String _chargeCode;
private Person _manager;
public Department(Person manager) {
_manager = manager;
}
public Person getManager() {
return _manager;
}
...
如果客户希望知道某人的经理是谁,他必须先取得Department对象:
manager = john.getDepartment().getManager();
这样的编码就是对客户揭露了Department工作原理,于是客户知道:Department用以追踪[经理]这条信息。如果对客户隐藏Department,可以减少耦合(coupling)。为了这一目的,我在Person中建立一个简单的委托函数:
public Person getManager() {
return _department.getManager();
}
现在,我得修改Person的所有客户,让它们改用新函数:
manager = john.getManager();
只要完成了对Department所有函数的委托关系,并相应修改了 Person的所有客户,我就可以移除Person中的访问函数个体Department()了。
posted @
2005-08-31 13:35
ivaneeo 阅读(190) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Hide Delegate)(3)--作法
作法
(Mechanics)
对于每一个委托关系中的函数,在server端建立一个简单的委托函数(delegating method)。
调整客户,令它只调用server提供的函数(不得跳过径自调用下层)。
==》如果client(客户)和server不在同一个package,考虑修改委托函数(delegating method)的访问权限,让client得以在package之外调用它。
每次调整后,编译并测试。
如果将来不再有任何客户需要取用图的Delegate(委托类),便可移除server中的相关访问函数(accessor for the delegate)。
编译,测试。
posted @
2005-08-31 13:21
ivaneeo 阅读(153) |
评论 (0)
|
编辑
收藏
重构二--在对象之间搬移特性(Hide Delegate)(2)--动机
动机
(Motivation)
如果某个客户调用了[建立了server object(服务对象)的某个值域基础之上]的函数,那么客户就必须知晓这一委托对象(delegate object)。万一委托关系发生变化,客户也得相应变化。你可以在server端放置一个简单的委托函数(delegating method),将委托关系隐藏起来,从而去除这种依存性。这么一来即便将来发生关系上的变化,变化将被限制在server中,不会涉及客户。
posted @
2005-08-31 13:09
ivaneeo 阅读(215) |
评论 (0)
|
编辑
收藏
仅列出标题
共67页:
First
上一页
43
44
45
46
47
48
49
50
51
下一页
Last
Copyright @ ivaneeo
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster