1、結構型設計模式 2、適配器模式 3、類適配器 4、對象適配器 ...
java設計模式5——適配器模式
1、結構型模式介紹
1.1、作用
從程式的結構上實現松耦合,從而可以擴大整體的類結構,用來解決更大的問題。
分類:
- 適配器模式
- 代理模式
- 橋接模式
- 裝飾模式
- 組合模式
- 外觀模式
享元模式
2、適配器模式介紹
適配器模式(Adapter Pattern)是作為兩個不相容的介面之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。
這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的介面功能。舉個真實的例子,讀卡器是作為記憶體卡和筆記本之間的適配器。您將記憶體卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取記憶體卡。
本節舉例:(網線和筆記本電腦)
3、第一種建模方式:(使用繼承,網線和轉換器綁在一起)又稱為類適配器
3.1、定義要適配的類(網線)
package com.xgp.company.結構性模式.第一種_適配器模式;
/**
* 要被適配的類(網線)
*/
public class Adaptee {
public void request() {
System.out.println("連接網線上網!");
}
}
3.2、定義客戶端類(電腦)
package com.xgp.company.結構性模式.第一種_適配器模式;
/**
* 客戶端類:想上網,插不上網線
*/
public class Computer {
//我們的電腦需要連接上轉接器才能上網
public void net(NetToUsb adapter) {
//上網的具體實現,找一個轉接頭
adapter.handleRequest();
}
public static void main(String[] args) {
//電腦,適配器,網線
Computer computer = new Computer();
Adapter adapter = new Adapter();
// Adaptee adaptee = new Adaptee();
computer.net(adapter);
}
}
此時,該電腦無法插入網線進行上網,因此需要適配
3.3、定義適配器的抽象實現
package com.xgp.company.結構性模式.第一種_適配器模式;
/**
* 介面轉換器的抽像實現
*/
public interface NetToUsb {
//作用:處理請求(網 => usb)
public void handleRequest();
}
3.4、定義具體的網線轉換器
package com.xgp.company.結構性模式.第一種_適配器模式;
/**
* 1、繼承方式(類適配器)
* 2、組合(對象適配器:常用)
*/
/**
* 適配器:需要連接usb和網線
*/
public class Adapter extends Adaptee implements NetToUsb {
@Override
public void handleRequest() {
//可以上網了
super.request();
}
}
此時網線通過適配器插入了電腦,實現了上網的功能了
連接網線上網!
4、第二種建模方式:(使用組合,網線和轉換器分離)又稱為對象適配器
網線類和適配器的抽象類不變
4.1、適配器類的改進
package com.xgp.company.結構性模式.第二種_適配器模式;
/**
* 1、繼承方式(類適配器)
* 2、組合(對象適配器:常用)
*/
/**
* 適配器:需要連接usb和網線
*/
public class Adapter implements NetToUsb {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
//可以上網了
adaptee.request();
}
}
4.2、電腦類的改進
package com.xgp.company.結構性模式.第二種_適配器模式;
/**
* 客戶端類:想上網,插不上網線
*/
public class Computer {
//我們的電腦需要連接上轉接器才能上網
public void net(NetToUsb adapter) {
//上網的具體實現,找一個轉接頭
adapter.handleRequest();
}
public static void main(String[] args) {
//電腦,適配器,網線
Computer computer = new Computer();
Adaptee adaptee = new Adaptee();
Adapter adapter = new Adapter(adaptee);
computer.net(adapter);
}
}
4.3、測試,電腦成功連上網線進行上網了
連接網線上網!