预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共25页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

重构与模式 何谓重构 l重构是一种对软件内部结构的改善,目的是在 不改变软件的可见行为的情况下,使其更理解, 修改成本更低。 可读性好的代码 lWardCuinningham l创造了CRC(Class-Responsibility-Collaboration) 卡 lWikiWeb l极限编程 l根据日期进行检查 l看看可读性好的代码 lnovember(20,2005) l调用了publicvoidDatenovember(intday,intyear) l还可以直接这样实现 ljava.util.Calendarc=java.util.Calendar.getInstance(); lc.set(2005,java.util.Calendar.NOVEMBER,20); lc.getTime(); l但可读性好的代码 l读起来像自然语言 l将重要代码与分散注意力的代码分离开来 不好的代码 l最常见的设计问题都出自这样的代码 l重复 l不清晰 l复杂 面对很多包含重复代码的构造函数 publicclassLoan{ publicLoan(floatnotional,floatoutstanding,intrating,Dateexpiry){ this.strategy=newTermROC(); this.notional=notional; this.outstanding=outstanding; this.rating=rating; this.expiry=expiry;} publicLoan(floatnotional,floatoutstanding,intrating,Dateexpiry,Datematurity){ this.strategy=newRevolvingTermROC(); this.notional=notional; this.outstanding=outstanding; this.rating=rating; this.expiry=expiry; this.maturity=maturity;} publicLoan(CapitalStrategystrategy,floatnotional,floatoutstanding,intrating,Dateexpiry,Date maturity){ this.strategy=strategy; this.notional=notional; this.outstanding=outstanding; this.rating=rating; this.expiry=expiry; this.maturity=maturity;} 把构造函数链接起来,从而获得最少的代码重复 publicclassLoan{ publicLoan(floatnotional,floatoutstanding,intrating,Dateexpiry){ this(newTermROC(),notional,outstanding,rating,expiry,maturity);} publicLoan(floatnotional,floatoutstanding,intrating,Dateexpiry,Datematurity){ this(newRevolvingTermROC(),notional,outstanding,rating,expiry,maturity);} publicLoan(CapitalStrategystrategy,floatnotional,floatoutstanding,intrating,Dateexpiry,Date maturity){ this.strategy=strategy; this.notional=notional; this.outstanding=outstanding; this.rating=rating; this.expiry=expiry; this.maturity=maturity;} 用FactoryMethod引入多态创建 l一个层次中的类都相似地实现一个方法,只是 对象创建的步骤不同 DOMBuilderTestXMLBuilderTest +testAddAboveRoot():void+testAddAboveRoot():void builder=newDOMBuilder(“order”); builder=newXMLBuilder(“order”); 用FactoryMethod引入多态创建 l创建调用FactoryMethod来处理实例化的方法 的唯一超类版本 AbstractBuilderTest