假期剛結(jié)束不久厅目,也沒什么好寫的,今天就水下文章法严,講講設(shè)計模式對開發(fā)時的影響损敷,做開發(fā)到現(xiàn)在,感覺設(shè)計模式對開發(fā)的影響還是挺大的深啤。
這次就簡單談?wù)勥m配器模式拗馒。可能適配器模式感覺比較雞肋溯街,但是用到的地方還挺多的诱桂,特別是合作開發(fā)的時候。
1.適配器模式
適配器模式苫幢,作為連接兩個接口的橋梁访诱。這個概念感覺有點(diǎn)那啥垫挨,很少用接口的朋友可能就沒有什么感覺韩肝,經(jīng)常面向接口編程的朋友比較能產(chǎn)生共鳴,簡單來說九榔,就是寫一個適配器(轉(zhuǎn)換器)來對接對象哀峻。
2.適配器模式使用
java適配器模式有兩種,類適配器和對象適配器
(1)類適配器demo
類適配器主要是使用繼承的方式連接兩個接口哲泊。我們假設(shè)對接接口A和接口B剩蟀。
先寫接口B
public interface MP4{
void play();
}
接口B的實(shí)現(xiàn)類
public class ExpensiveMP4 implement MP4{
public void play(){
// todo
}
}
接口A
public interface Player{
void action();
}
假如你的工程中有這幾個類,然后你發(fā)現(xiàn)切威,action()方法中要寫的操作育特,就是ExpensiveMP4的play()中的操作“//todo”,所以你沒必要重復(fù)再寫一次,想個辦法讓他們適配缰冤。所以犬缨,你想讓外部調(diào)用Player的時候去調(diào)用ExpensiveMP4的play,如果用類適配器的話可以這樣寫
public class ExpensiveAdapter extends ExpensiveMP4 implement Player{
public void action(){
play();
}
}
這樣就把兩個接口連接起來了棉浸,不過我一般用不上類適配器怀薛,感覺這樣的做法不太靈活,而且在java中迷郑,盡量少用繼承枝恋,多用組合。而且這種寫法我覺得也不太舒服嗡害。
(2)對象適配器demo
上面的類適配器用的是“繼承”的方式去連接焚碌,這里的對象適配器用的是“組合”的方式。我們假設(shè)對接接口A和接口B就漾。就用上面的MP4接口呐能,Player接口和ExpensiveMP4類吧。
這時候我們使用對象適配器的話可以這樣寫抑堡。
public class PlayerAdapter implement Player{
public ExpensiveMP4 expensiveMP4;
public PlayerAdapter (){
this.expensiveMP4 = new ExpensiveMP4();
}
public void action(){
if(expensiveMP4 != null){
expensiveMP4 .play();
}
}
}
感覺這樣好像不太靈活摆出,expensiveMP4像死的一樣,毫無靈魂首妖,好吧偎漫,我們改改。
public class PlayerAdapter implement Player{
public ExpensiveMP4 expensiveMP4;
public PlayerAdapter (ExpensiveMP4 expensiveMP4){
this.expensiveMP4 = expensiveMP4;
}
public void action(){
if(expensiveMP4 != null){
expensiveMP4 .play();
}
}
}
這樣就比剛才好多了有缆,比剛才的代碼靈活多了象踊,但是總感覺有點(diǎn)普通,我們要把代碼寫得有點(diǎn)藝術(shù)棚壁,抽象就是藝術(shù)杯矩,好吧,再改改袖外。
public class PlayerAdapter implement Player{
public MP4 mp4;
public PlayerAdapter (MP4 mp4){
this.mp4 = mp4;
}
public void action(){
if(mp4!= null){
mp4.play();
}
}
}
可能這樣看起來會比較好一點(diǎn)吧史隆,比較容易看出如何適配兩個接口。
3.適配器模式的使用場景
(1)其中一個使用的場景是像上面所說的一樣曼验,有兩個接口泌射,你主動的想去連接著兩個接口,寫個適配器鬓照,感覺這種情況也不是很多熔酷,因?yàn)楹芏鄷r候都是些一個實(shí)體類對象調(diào)用另一個實(shí)體類對象。
(2)被動使用的情況豺裆,這種情況我可能見得比較多拒秘。舉個栗子,比較極端的栗子,你和你同伴一起合作開發(fā)躺酒,你同伴寫一個部分咙轩,你寫一個部分,現(xiàn)在兩個部分要對接阴颖。結(jié)過到對接時活喊,你們發(fā)現(xiàn)兩個人都自定義了接口,而且兩個人都開發(fā)完了量愧,都不想改钾菊,那怎么辦,只能寫一個適配器去適配兩個接口偎肃。又或者說你開發(fā)新版本的時候重新定義了接口煞烫,要和舊版本寫適配的時候,為了方便也可以使用適配器模式累颂。