第三章 體驗重構
個人強烈推薦《重構--改善既有**的設計》(不過建議有2年以上的開發人員看,太早看是浪費時間)。
本章,作者用來乙個階乘容器的設計來說明重構。
3.1 乙個階乘容器
通常,作為乙個初學者,我們的**最初會設計如下:
code
class
factorialcontainer
public
factorialcontainer(
intcapacity)
protected
arraylist m_factoriallist;
protected
intm_capacity;
public
intcapacity
set}
public
long
this
[int
index]
set}
public
void
add()
m_factoriallist.add(result);
}public
void
removeat(
intindex)
public
void
clear()
}3.2 **的壞味道
上面的**計算階乘的演算法與元素的新增行為緊密的糾纏在一起。根據職責分離原則,需要進行分離。
code
public
void
add()
private
long
countfactorial()
return
result;
}3.3 需求發生變化
後來我們的需求發生變化,需要增加菲波那契數列的計算。
經過重構:
code
public
abstract
class
mathcontainer
public
mathcontainer(
intcapacity)
protected
arraylist m_mathlist;
protected
intm_capacity;
public
intcapacity
set}
public
long
this
[int
index]
set}
public
void
add()
public
void
removeat(
intindex)
public
void
clear()
protected
abstract
long
count();
}code
public
class
factorialcontainer : mathcontainer
public
factorialcontainer(
intcapacity) :
base
(capacity)
protected
override
long
count()
return
result;}}
public
class
fibonaccicontainer : mathcontainer
public
fibonaccicontainer(
intcapacity) :
base
(capacity)
protected
override
long
count()
else
return
result;}}
呵呵,上面是template method 模式。
3.5引入設計模式
使用工廠模式來管理例項的建立。
code
public
abstract
class
mathfactory
public
class
factorialfactory : mathfactory
public
override
mathcontainer createinstance(
intcapacity)
} public
class
fibonaccifactory : mathfactory
public
override
mathcontainer createinstance(
intcapacity)
} 通過工廠物件,通過它來建立需要的具體容器類物件了。
code
[stathread]
static
void
main(
string
args)
for(
inti =0
; i
<
8; i++)
console.writeline();
console.writeline(
"count fibonacci form 1 to 8:");
for(
inti =1
; i
<=
8; i++)
for(
inti =0
; i
<
8; i++)
console.readline();
}
《軟體設計精要與模式》讀書筆記(一) 設計之道
架構設計需要關注內容 1.程式組織 program organization 劃分功能模組,正確描述模組間關係,利用高內聚低耦合設計思想與原則對功能模組以元件或者包的形式進行封裝。根據面向介面設計原理將元件和包進行抽象,公開暴露服務介面。利用分層架構模式,通過引入分層模式,分離不同的功能模組,根據層...
《軟體設計精要與模式》
給我乙個支點,我就能撬起地球 關鍵不在於力量有多大,而在於如何合理地利用力量。軟體設計同樣如此。思想的確立,技巧的把握,將在很大程度上決定軟 件架構的合理性。基於這樣的目的,本書圍繞著軟體設計的核心內容,結合大量的例項與 充分地展示了軟體設計之美,以及設計 力量 的巧妙運用。內容涵 蓋了設計模式 重...
書評 軟體設計精要與模式
書評 軟體設計精要與模式 終於閱讀完了張逸先生的 軟體設計精要與模式 一書,掩卷沉思,書中對於軟體設計這門學問的理解和闡述讓我受益良多,潛移默化之中,我對於軟體設計的過程以及模式的使用又有了新的認識。因此,我對此書的評價是一本不可多得的優秀書籍。不能光說優秀,到底優秀在何處呢?個人感覺有以下幾點 首...