適配器模式:不要你覺得,我要我覺得

目的

將現有的代碼能力適配到新的接口

例子代碼

趙高欲爲亂, 恐羣臣不聽, 乃先設驗, 持鹿獻於二世日: “馬也” 二世笑曰: “丞相誤耶? 謂鹿爲馬.” 問左右, 左右或默, 或言馬以阿順趙高, 或言鹿者. 高因陰中諸言鹿者以法

這就是很有名的指鹿爲馬的故事了, 我們可以看到趙高需要的是個馬, 但實際上是個鹿, 我們怎麼通過適配器模式來實現他的指鹿爲馬呢

我們先定義一下鹿和馬的接口:

馬:

public interface Horse extends Target {

    void eat();

    void run();

    void sleep();
}

鹿:

public interface Deer extends Adaptee {

    void eat();

    void walk();

    void sleep();
}

其中 Target 和 Adaptee 是標記形接口, 無實際意義

本來這二個接口其實沒什麼關聯, 但是現在的情況是我們有個鹿, 但是要給皇帝一匹馬, 先看看我們這條鹿:

public class MyDeer implements Deer {
    @Override
    public void eat() {
        System.out.println("喫草");
    }

    @Override
    public void walk() {
        System.out.println("走路, 遇到緊急情況衝刺");
    }

    @Override
    public void sleep() {
        System.out.println("睡覺");
    }
}

我們將這個鹿變成馬:

@Data
@AllArgsConstructor
public class HourseAdapter implements Horse {

    private Deer deer;

    @Override
    public void eat() {
        deer.eat();
    }

    @Override
    public void run() {
        deer.walk();
    }

    @Override
    public void sleep() {
        deer.sleep();
    }
}

使用的時候就是這樣:

Horse horse = new HourseAdapter(new MyDeer());
horse.eat();
horse.run();
horse.sleep();

輸出結果:

喫草
走路, 遇到緊急情況衝刺
睡覺

類圖:
類圖地址:
https://mp.weixin.qq.com/s?__biz=MzUzOTQ2MjgwNA==&mid=2247483859&idx=1&sn=ac2223296fdbe551201fff2a8f125fba&chksm=fac95c28cdbed53ee3a2e782b965f54370c1b43bfec47f5435d925ef345f7e70475dbe3f1d41&token=1268878968&lang=zh_CN#rd

一般微服務結構下或者依賴第三方接口或者 jar 包的時候, 可以考慮使用適配器模式對代碼進行兼容和模型防腐

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章