意圖
將一個類的接口轉換成客戶希望的另一個接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些類可以一起工作。
適配器模式屬于結構模式。
類適配器模式(通過繼承的方式實現(xiàn)適配器模式)
Adapter類,通過繼承src類,實現(xiàn)dst類接口,完成src->dst的適配。
應用實例說明
以生活中充電器的例子來講解適配器,充電器本省相當于Adapter,220V交流電相當于src(即被適配者),我們的dst(即目標)是5V直流電。
類圖:文章來源:http://www.zghlxwxcb.cn/news/detail-799718.html
public class Voltage220V{
public int output220V(){
int src = 220;
System.out.println("電壓=" + src + "伏");
return src;
}
}
public interface IVotage5V {
int output5V();
}
public class VoltageAdapter extends Voltage220V implement IVoltage5V {
@Override
public int output5V(){
int srv = output220V();
return src/4;
}
}
public class Phone {
//充電
public void chargin(IVotage5V ivotage5V){
if(ivotage5V.output5V() == 5){
System.out.printlin("電壓為5V,可以充電");
}else if(iVotage5V.output5V() > 5){
System.out.println("電壓大于5V,不能充電");
}
}
}
public class Client{
public static void main(String[] args){
System.out.println("===類適配器模式===");
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
類適配器模式優(yōu)缺點
- Java是單繼承機制,多以類適配器需要繼承src類者一點算是一個缺點,因為者要求dst必須是接口,有一定局限性;
- src類的方法在Adapter中都會暴露出來,也增加了使用的成本。
- 由于其繼承了src類,所以它可以根據(jù)需求重寫src類的方法,使得Adapter的靈活性增強了。
對象適配器模式(使用聚合方式來實現(xiàn)適配器模式)
- 基本思路和類的適配器模式相同,只是將Adapter類作修改,不是繼承src類,而是持有src類的實例,以解決兼容性的問題。即:持有src類,實現(xiàn)dst類接口,完成src->dst的適配
- 根據(jù)“合成復用原則”,在系統(tǒng)中盡量使用關聯(lián)關系來代替繼承關系。
- 對象適配器模式是適配器模式常用的一種。
類圖:
public class Voltage220V{
public int output220V(){
int src = 220;
System.out.println("電壓=" + src + "伏");
return src;
}
}
public interface IVotage5V {
int output5V();
}
public class VoltageAdapter implement IVoltage5V {
private final Voltage220V voltage220V;
public VoltageAdapter(Voltage220V voltage220V){
this.voltage220V = voltage220V;
}
@Override
public int output5V(){
int srv = voltage220V.output220V();
return src/4;
}
}
public class Phone {
//充電
public void chargin(IVotage5V ivotage5V){
if(ivotage5V.output5V() == 5){
System.out.printlin("電壓為5V,可以充電");
}else if(iVotage5V.output5V() > 5){
System.out.println("電壓大于5V,不能充電");
}
}
}
public class Client{
public static void main(String[] args){
System.out.println("===類適配器模式===");
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
注
以上示例引用自尚硅谷設計模式教程
https://www.bilibili.com/video/BV1G4411c7N4?p=62&spm_id_from=pageDriver&vd_source=3141b9fdb12c5901aa70919c50575543文章來源地址http://www.zghlxwxcb.cn/news/detail-799718.html
到了這里,關于11-適配器模式(Adapter)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!