設計模式(二): Adapter模式(介面卡模式)
阿新 • • 發佈:2019-01-03
Adapter模式(介面卡模式)
介面卡模式
1.類介面卡模式(繼承)
基礎類,提供printWithParen()方法來列印帶()的內容,提供printWithAster()方法來提供帶*號的內容:
Banner.java
public class Banner {
private String show;
public Banner(String show) {
this.show = show;
}
// 列印加括號
public void printWithParen() {
System.out.println("(" + show + ")");
}
// 列印加*號
public void printWithAster() {
System.out.println("*" + show + "*");
}
}
現在的需求是要提供printWeak和printStrong方法分別列印括號和星號。
Print.java
/**
* 需求介面,要一個printWeak和printStrong分別列印括號和星號
*/
public interface Print {
// 列印()
void printWeak();
// 列印*
void printStrong();
}
介面卡類,printWeak,printStrong方法使用printWithParen,printWithAster方法來實現。
所以通過繼承來獲取Banner 中printWithParen,printWithAster方法,並 實現Print 介面,實現printWeak,printStrong方法。
PrintBanner.java
// 介面卡類,繼承Banner類獲得printWithParen、printWithAster方法,實現Print介面,實現需求 提供適配
public class PrintBanner extends Banner implements Print{
public PrintBanner(String show) {
// 父類構造器 即Banner類的構造器
super(show);
}
@Override
public void printWeak() {
// 繼承的方法
printWithParen();
}
@Override
public void printStrong() {
// 繼承的方法
printWithAster();
}
}
測試類:
@Test
public void test() {
Print p = new PrintBanner("demo");
p.printWeak();
p.printStrong();
}
控制檯列印:
(demo)
*demo*
Print p = new PrintBanner(“demo”),面向Print介面程式設計,printWeak,printStrong方法的實現,對於呼叫者完全隱藏。
委託介面卡模式(物件)
上面的示例是通過呼叫 繼承的來的printWithParen,printWithAster方法來實現的。也可以 通過具體對像來呼叫。
Banner.java
public class Banner {
private String show;
public Banner(String show) {
this.show = show;
}
public void printWithParen() {
System.out.println("(" + show + ")");
}
public void printWithAster() {
System.out.println("*" + show + "*");
}
}
Print.java
public interface Print {
void printStrong();
void printWeak();
}
PrintBanner.java
// 實現介面方式,不需要繼承
public class PrintBanner implements Print {
// 物件例項
private Banner banner;
public PrintBanner(String show) {
this.banner = new Banner(show);
}
@Override
public void printStrong() {
banner.printWithParen();
}
@Override
public void printWeak() {
banner.printWithAster();
}
}
測試:
@Test
public void test() {
Print print = new PrintBanner("hello");
print.printStrong();
print.printWeak();
}
控制檯列印 :
(hello)
*hello*
記錄
Adapter模式會對現有的類進行適配,生成新的類。通過該模式可以很方便的建立我們需要的方法群 。不改變原有類,生成新的類。Adapter模式填補具有不同介面的兩個類之間的縫隙。角色功能完全不同則不能使用Adapter模式。