﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-OCM Dream-文章分类-13 设计模式和重构</title><link>http://www.blogjava.net/nobody_am/category/7107.html</link><description>&lt;br&gt;
Toooooo many Thing</description><language>zh-cn</language><lastBuildDate>Fri, 27 Apr 2007 01:42:10 GMT</lastBuildDate><pubDate>Fri, 27 Apr 2007 01:42:10 GMT</pubDate><ttl>60</ttl><item><title>重构第一课: 函数重构</title><link>http://www.blogjava.net/nobody_am/articles/113881.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Thu, 26 Apr 2007 11:05:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/113881.html</guid><wfw:comment>http://www.blogjava.net/nobody_am/comments/113881.html</wfw:comment><comments>http://www.blogjava.net/nobody_am/articles/113881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nobody_am/comments/commentRss/113881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nobody_am/services/trackbacks/113881.html</trackback:ping><description><![CDATA[<span style="background-color: #27ff08;">函数重构手段1</span>，Extract Method，讲的是什么呢？把一个大函数改成几个小函数。<br>遇到的困难是什么呢？大函数里往往会有临时变量。下面分别简述对策：<br>A，没有临时变量，太好了，直接把这部分代码分到一个小函数里。<br>B，有临时变量？把他作为参数，传入小函数，经过处理之后，返回这个数。<br>C，多个临时变量怎么办？首先看看能否把这些变量分别用几个小函数处理，且返回。否则，就用杀手锏：Replace Method with Method Object。<br><br><span style="background-color: #27ff08;">函数重构手段2</span>，Inline Method，讲的恰好是Extract Method的反面，即用函数体内容替换函数调用的地方。主要用在函数内容和函数名称同样清晰易读。<br><br><span style="background-color: #27ff08;">函数重构手段3</span>，Inline Temp，与Inline Method从广义上讲类似，即用临时变量的表达式，替换使用该变量的地方。主要是因为临时变量只赋过一次值。结果就是可以减少临时变量的数量。<br><br><span style="background-color: #27ff08;">函数重构手段4</span>，Replace Temp with query，就是把临时变量的表达式放到某个小函数里返回。前提仍然是，临时变量只赋了一次值。结果也是可以减少临时变量。<br><br><span style="background-color: #27ff08;">函数重构手段5</span>，Introduce explaining variable，就是把复杂表达式拆分，用temp或query分别表达，最后把temp或query整合成表达式，目的就一个，使代码更易读。<br><br><span style="background-color: #27ff08;">函数重构手段6</span>，Split temporary variable,就是如果一个临时变量被多次赋值，代表过多项意义时，就用多个变量代替这个变量，使得这多个变量分别代表不同的意义。<br><br><span style="background-color: #27ff08;">函数重构手段7</span>，Remove assignments to parameters，是什么呢？即，不要对函数的虚参赋值。目的就是使代码更清晰。做法就是把参数赋给一个临时变量。<br><br><span style="background-color: #27ff08;">函数重构手段8</span>，Replace method with method object,这个重构手段是函数重构的<span style="text-decoration: underline;">杀手锏</span>，无论你有多少个临时变量的函数，都可以被重构。做法是，另外申明一个&#8220;函数类&#8221;，把大函数里的临时变量作为&#8220;函数类&#8221;的成员变量，然后把大函数分解成&#8220;函数类&#8221;的多个小函数。<br><br><span style="background-color: #27ff08;">函数重构手段9</span>，Substitute Algorithm,这个重构手段需要算法来支撑，即用一个更易读的算发替换另一个算法，但保持函数的功能不变。<br><br><br><br><br><br> <img src ="http://www.blogjava.net/nobody_am/aggbug/113881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-04-26 19:05 <a href="http://www.blogjava.net/nobody_am/articles/113881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式的遵循的设计原则</title><link>http://www.blogjava.net/nobody_am/articles/49810.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Thu, 01 Jun 2006 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/49810.html</guid><wfw:comment>http://www.blogjava.net/nobody_am/comments/49810.html</wfw:comment><comments>http://www.blogjava.net/nobody_am/articles/49810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nobody_am/comments/commentRss/49810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nobody_am/services/trackbacks/49810.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">OCP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span lang="EN-US">OCP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即“开闭”原则，讲的是：一个软件实体应该对扩展开放，对修改关闭。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了实现</span>
				<span lang="EN-US">OCP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则，抽象化是关键，抽象类或者接口给出一个预见所有可能的扩展，在任何扩展情况下都不会改变，这就使得系统的抽象层不需要修改，从而满足了对修改关闭。同时，从抽象层扩展一个新的具体类，可以改变系统的行为，这究满足了对扩展开放。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">LSP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span lang="EN-US">LSP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则，即“里氏替换”原则，讲的是：一个软件实体如果使用的是一个基类的化，那么一定使用于其子类，而且她根本不能察觉出基类对象合子类对象的区别。</span>
				<span lang="EN-US">LSP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是集成复用的基石。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">DIP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span lang="EN-US">DIP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则，即“依赖倒转”原则，讲的是：抽象不应当依赖于细节；细节应当依赖于抽象。另一种表述是：要针对接口编程，不要针对实现编程。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">4、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">ISP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span lang="EN-US">ISP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则，即“接口隔离”原则，讲的是：使用多个接口要比使用一个接口好。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">5、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">CARP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span lang="EN-US">CARP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原则，即“合成聚合复用”原则，讲的是：尽量使用合成</span>
				<span lang="EN-US">/</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">聚合，尽量不要使用继承。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">6、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">LoD</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">法则</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span lang="EN-US">LoD</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">法则，即“迪米特”法则，讲的是：一个对象应当对其他对象有尽可能少的了解。</span>
		</p>
<img src ="http://www.blogjava.net/nobody_am/aggbug/49810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2006-06-01 22:40 <a href="http://www.blogjava.net/nobody_am/articles/49810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>