千峰Java教程 066 介面卡設計模式

2021-09-23 05:52:00 字數 2044 閱讀 9178

介面卡模式(adapter):將乙個類的介面轉換成客戶希望的另乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

可以看上面的,比如第乙個類跟第三個類,乙個是方的乙個是圓的,沒法懟進去,這時候就需要中間那個類,用來連線方形和圓形。在生活中也有這樣的例子,如插線盤,還有電腦的電源介面卡,把電源三角口轉換成計算機的圓口插到電腦上。

我們先來一串**:

public class demo1

//用ipowera介面的時候下面設計乙個靜態方法

public static void work(ipowera a)

//寫完這個方法,就要在主函式中用這個方法了

}inte***ce ipowera//設定乙個電源a的介面

class poweraimpl implements ipowera}/*

結果:正在連線...

電源a開始工作

工作結束。

*/

我們看上面的**,他是這樣子的:

現在需求發生了變化,介面卡有點像補救的辦法一樣,要把這個圖象換成第乙個圖象,中間加乙個介面卡

public class demo1

//用ipowera介面的時候下面設計乙個靜態方法

public static void work(ipowera a)

//寫完這個方法,就要在主函式中用這個方法了

}inte***ce ipowera//設定乙個電源a的介面

class poweraimpl implements ipowera

}inte***ce ipowerb//那我們這時候新增乙個b電源

class powerbimpl implements ipowerb

}class adapter implements ipowera//這裡定義乙個介面卡,這個類是ipowera的子類

public void insert()//這裡把b轉換成了a }

/*結果:

正在連線...

電源b開始工作

工作結束。

*/

這樣,就把b變成了a。此時a介面沒有改變,b介面也沒有改變(對修改關閉,對擴充套件開放)

還有一種用法:

public class demo1

}inte***ce ianimal//這時候我們新建乙個介面,有唱、哭、跑、游泳四個方法

class dog implements ianimal//繼承ianimal的時候,要把介面裡的方法都繼承下來,但可以不實現。我們關注跑這個方法

public void cry(){}

public void run()

public void swim(){}}/*

結果:我是瘋狗,瘋狂地跑

*/

我們定義乙個介面卡,子類就不用implements ianimal了

public class demo1

}inte***ce ianimal//這時候我們新建乙個介面,有唱、哭、跑、游泳四個方法

abstract class ianimalfunction//介面卡

public void cry(){}

public void run(){}

public void swim(){}

}class dog extends ianimalfunction//這個就變成了ianimalfunction的子類,用來轉接用,不用再加唱、哭、游泳的方法了}/*

結果:我是瘋狗,瘋狂地跑

*/

oo設計原則:1、面向介面程式設計(面向抽象程式設計)

2、封裝變化

3、多用組合,少用繼承

4、對修改關閉,對擴充套件開放

Java 介面卡模式

先上基本概念,再談談我的理解 介面卡模式有兩種,物件介面卡和類介面卡。介面卡模式將乙個類的介面轉換成客戶期望的另乙個介面,介面卡讓原本介面不相容的類可以合作無間。例子 交流電介面卡。看看類圖關係 這個為物件介面卡的類圖 解釋一下 比如client類有些方法a b adaptee也有一些特別的方法a1...

java 事件介面卡

事件介面卡是 介面的空實現 事件介面卡實現了 介面,並為介面的每個方法都提供了空的實現,方法體內沒有具體的 當需要建立 的時候,可以通過繼承介面卡,而不是實現 介面。因為介面卡已經空實現了 介面中所有的方法,因此只要重寫自己想 要寫的方法,從而簡化事件 的 的編寫。介面r 介面卡 container...

Java 介面卡模式

inte ce windows class mywindows implements windows public void max public void close public class adaptdemo 先看 介面windows,介面實現類mywindows,但是我現在想實現介面wind...