天天看點

Java設計模式:擴充卡模式

擴充卡模式

定義:

将一個類的接口轉換成客戶希望的另一個接口,Adapter模式使得原本由于接口不相容不能一起工作的那些類可以一起工作。

應用場景:

系統需要使用現有類,而這些類不符合系統系統的接口。

使用第三方元件,元件接口定義和自己定義不同,不希望修改自己的接口,但是要使用第三方元件接口的功能。

優點:

符合單一職責原則,符合開閉原則。

代碼示例:

擴充卡模式主要分三類:類的擴充卡模式、對象的擴充卡模式、接口的擴充卡模式。

生活當中,手機的電源擴充卡就是很好的列子。标準電壓是220V,二手機可能隻需要5V電壓就夠了,電源擴充卡就可用将220V電壓轉成5V電壓。

目标接口(Target):客戶所期待的接口。目标可以是具體的或抽象的類,也可以是接口。

需要适配的類(Adaptee):需要适配的類或适配者類。

擴充卡(Adapter):通過包裝一個需要适配的對象,把原接口轉換成目标接口。

對象的擴充卡模式:

package com.test;

public class ObjectAdapter {
    public static void main(String[] args) {
        Target target = new Adapter(new Adaptee());
        target.output5v();
    }
}

class Adaptee{
    public int output220v(){
        return 220;
    }
}

interface Target{
    int output5v();
}

class Adapter implements Target{

    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public int output5v() {
        int output220v = adaptee.output220v();
        System.out.println("原始電壓:"+output220v+"---輸出電壓:"+5);
        return 5;
    }
}
           

類的擴充卡模式:

package com.test.v;

public class ClassAdapter {
    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.output5v();
    }
}


class Adaptee{
    public int output220v(){
        return 220;
    }
}

interface Target{
    int output5v();
}

class Adapter extends Adaptee implements Target{
    public int output5v() {
        int output220v = output220v();
        System.out.println("原始電壓:"+output220v+"---輸出電壓:"+5);
        return 5;
    }
}