設計模式的本質是什麼(轉)

設計模式的本質是面向對象方法的實際運用。具體而言,是封裝、繼承、多態和關聯的反覆使用。可以說,現在市面上關於設計模式的書沒有一本是適合初學者的。套用網上看到的句型:你跟他講模式,他跟你談UML;你跟他講UML,他跟你談軟件工程;你跟他講軟件工程,他跟你談解耦;你跟他講解耦,他跟你談框架;你跟他講框架,他跟你談哲學;你跟他講哲學,他跟你談建築;你跟他講建築,他又跟你談模式。 
感覺真正理解什麼是設計模式,就是要透徹理解OO的四大要素:封裝、繼承、多態和關聯。其中核心是封裝的概念。 
拿最基本的數據類型舉例: 
int a = 3; 
這裏,我創建了一個數據對象實例:a。如果我將這個創建過程封裝成對象 
class Int { 
private int a = 3; 
public static int getIntInstance() { 
return a; 


這不就是工廠方法嗎?不理解設計模式本質的人會說這是多此一舉。有沒有明白人能告訴我是真的多此一舉嗎? 
上面的例子是數據封裝,下面舉一個邏輯封裝的例子: 
循環遍歷大概初學編程的人沒有不會的。例如,有一個數組 
int[] intArray = new int[] {56,27,19,31,22, 9}; 
如果要訪問數族中的每一個元素,最常見的方式 
for(int i=0; i<intArray.length; i++) { 
println(intArray[i]); 

在這個循環中,有三個邏輯:1. 判斷邏輯:i<intArray.length;2. 訪問邏輯:intArray[i];3. 遞增:i++。 
將這三個邏輯加以封裝 

class MyIterator { 
int i=0; 
int[] intArray; 
MyIterator (int[] intArray) { 
this.intArray = intArray; 

// 封裝了第一個邏輯 
boolean hasNext() { 
return i<intArray.length; 

// 封裝了第二個和第三個邏輯 
int next() { 
return intArray[i++]; 


這樣,我們就可以這樣遍歷了 
MyIterator myIterator = new MyIterator(intArray); 
while(myIterator.hasNext()) 
println(myIterator.next()); 

這不就是迭代子模式嗎。捅破了窗戶紙,所謂“設計模式”,只不過是一些編程技巧罷了。真用不着上綱上線。只是,封裝這個看似簡單的概念,被用到了極致。 
數據可以封裝,函數可以封裝,邏輯可以封裝,對象可以封裝,網絡可以封裝,硬件可以封裝,連人的思想都可以封裝。馬克思在《資本論》中開宗明義第一句就是:資本主義生產方式佔統治地位的社會的財富,表現爲“龐大的商品堆積“。 

OO方式下的佔絕對地位的基本概念,表現爲”封裝的無所不在“。


原文鏈接:http://www.douban.com/group/topic/35784789/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章