感覺真正理解什麼是設計模式,就是要透徹理解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/