今天我們要學習的是設計模式中的適配器模式適配器模式其實也比較好理解光從它的名字我們都能理解個所以然了
適配器模式定義將一個類的接口轉換成客戶希望的另外一個接口適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作
上面的這段話可能對初學者來說有點抽象短短的一段話提到了幾個關鍵的技術點都是一些基本語法如果我們還沒有掌握這些語法最好還是先去解決前提再來攻克設計模式
那到底啥叫適配器模式這個適配很形象生動的形容了所表達的意思那麼一般用在什麼地方呢?怎麼來解決一些接口不兼容的情況下的問題下面我們就來由淺入深的進行理解學習[王清培版權所有轉載請給出署名]
[面向對象編程就是對大自然進行虛擬的抽象的建模只要我們結合身邊的事物多思考多想象很多東西都能迎刃而解]
我們還是用問題來作引導這樣便於我們自己開動大腦進行自主的學習在日常生活中我們經常碰見一些無法直接對接的現象比如自來水管竹筒插座等等這些東西都會由於兩頭沒有一個標准導致無法直接連接使用自來水管從地底下通往各個住戶家中但是不可能幾十萬的住戶用很細的水管吧必須用很粗的水管進行送水但是到了住戶家中不可能用那麼粗的水管使用吧所以從水廠到我們使用水之間是經歷很多環節的適配過程到了住戶家中必須用細的水管進行使用在送水的過程中必須用很大的水管進行送水
上圖中的每一個畫紅線的地方都是需要適配的地方在使用的時候必須進行接口的對接才能使用
我們都有使用插座的習慣我們的筆記本假如是兩眼插座的但是插線板只有三眼的怎麼辦?難道這個就不能用了嗎?當然不是我們需要一個能對接三眼插座的插線板這樣我們就能使用電腦了請看圖
這兩個例子都說明了適配器的作用我們不能因為接口不同導致兩個工具不能使用起來就好比圖中的水桶和水廠兩個對象其實這兩個對象之間只需要用適配器進行對接一下就能成功的使用我們來看代碼怎麼實現
水廠代碼
using System;using SystemCollectionsGeneric;using SystemText;namespace ConsoleApplication{public class 水廠{水廠供水接口 符合接口的水管;//水廠只認識該標准的接口public void 對接(水廠供水接口 接口){ 符合接口的水管 = 接口;}
public void 送水(){符合接口的水管送水(送出噸水);}
}
}
水廠供水接口代碼
using System;using SystemCollectionsGeneric;using SystemText;namespace ConsoleApplication{public interface 水廠供水接口{int 水管直徑 { get; }
void 送水(string 要送的水);}
}
各地區水桶代碼
using System;using SystemCollectionsGeneric;using SystemText;namespace ConsoleApplication{public class 各地區水桶{string 保存水的容器 = stringEmpty;public void 送水來了(string 水){保存水的容器 = 水;ConsoleWriteLine(已經收到水廠送來的 + 水);}
}
}
水桶適配器代碼
using System;using SystemCollectionsGeneric;using SystemText;namespace ConsoleApplication{public class 水桶適配器 : 水廠供水接口{各地區水桶 水桶;#region 水廠供水接口 成員public int 水管直徑{get { return ; }
}
public void 設置適配對象(各地區水桶 桶){水桶 = 桶;}
public void 送水(string 要送的水){水桶送水來了(要送的水);}
#endregion}
}
模擬調用代碼
using System;using SystemCollectionsGeneric;using SystemText;namespace ConsoleApplication{class Program{static void Main(string[] args){水廠 shuichang = new 水廠();各地區水桶 shuitong = new 各地區水桶();水桶適配器 shuitongadapter = new 水桶適配器();shuitongadapter設置適配對象(shuitong);shuichang對接(shuitongadapter);shuichang送水();ConsoleReadLine();}
}
}
From:http://tw.wingwit.com/Article/program/net/201311/12656.html