Java 適配器模式-難道學姐這是喫醋了麼?......讓你以最生動的例子記住適配器模式

忙!忙!忙!一直沒有更新文章,唉,訪問量掉的厲害啊!粉絲增長速度也慢了!最近趕着項目上線,更新迭代!實在沒有時間吶!!!還有,上次寫的文章有點說不過去,整改了一下,今天好不容易抽出來點時間,來講這個故事啦!



小故事引入

自上篇繼續講故事

“嗯—”!,伸了個懶搖,我睡得好舒服!我看學姐還在睡覺,就沒有去打擾她,我起牀後便去做早餐。今天打算喫完早餐後去學校,準備上課!

沒想到,學姐這麼能睡,一下子睡到了10點,我說:“我給你加熱一下早餐吧!喫完後歇會兒咱們就去學校!”,學姐點點頭答應了!

這是我的第一堂課!講的是Java適配器模式,哈哈,這基礎知識對於我來說不在話下,但是對於和我一樣剛入學的小姐姐來說,這就不一樣了!下課後,有個小姐姐問我問題,她有很多不懂的地方,我當然能理解,第一次接觸這麼深的概念,堪比登天!我仔細給她講了這節課的內容,或許她聽懂了吧!哈哈!或許是不好意思問我了!

下課了,那位問我問題的小姐姐,突然和我說,“中午我們一起去喫飯吧!”,我委婉地回答:“不好意思,我中午有約了…”。下面是自習課,我估計她還是沒有搞懂,我便去她旁邊給她講明白!直到飯點的時候,她可算搞懂了!此時,我站起來準備走出教室,快到門口的時候,發現學姐已經在等我了!不過,貌似有點糟糕,我能感覺到學姐此時此刻的心情!“喫醋了唄!”,我上前和學姐尷尬的說道:“去喫什麼呢?”,“餃子,多沾點醋!”,緊接着,拉着我就走…

還真是,學姐要了一碗醋,竟然讓我喝下!此時我心想“好吧,看來是我喫醋了!”,“以後不許坐到女同學旁邊!”,學姐俏皮的說道!我又有什麼辦法呢,點點頭,然後大口大口喝起醋來…

喫完飯後,學姐對我說:“我們去學校外面租房住,租房住在一塊方便照顧我…”,我點點頭答應了!

好了,誰知道租房會發生什麼,等下篇文章吧!來看看適配器模式!


基本概念

我們都希望故事中的小姐姐能學會適配器模式,但是老師講的她不懂,她需要我來教,我就承擔適配者的責任,我要教會她,讓小姐姐可以學會適配器模式,官方一點的話來講,就是 將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

接下來會講到類適配器對象適配器,可以看代碼中的註釋!


類適配器

首先,小姐姐需要我來講,我要給她先講概念,再講代碼實例!

創建我這個接口!

/**
 * 這個代表我,小姐姐需要通過我來學會適配器模式(就是她需要我教,她不會)
 */
public interface IKnow {

    //教她基本概念
    void teachBasic();

    //給她講代碼實例
    void teachCode();

}


目標:小姐姐要學會適配器模式,創建這個目標類

/**
 * 目標:同班小姐姐最終要學會適配器模式
 */
public class SmallSisterKnow {

    /**
     * 學會適配器模式
     */
    public void know() {
        System.out.println("小姐姐終於學會了適配器模式!");
    }

}


首先,小姐姐知道要達成的目標,她朝這個方向去努力,學會適配器模式的動力來自於這個目標!所以,小姐姐繼承這個目標,並實現有人教她的接口,也就是我!然後我要教她(重寫方法)!

/**
 * 同班小姐姐類
 */
public class SmallSister extends SmallSisterKnow implements IKnow {


    /**
     * 重寫教小姐姐的方法(可以理解爲她需要教)
     */
    @Override
    public void teachBasic() {
        System.out.println("我給小姐姐講了基本的概念");
    }

    /**
     * 重寫教小姐姐的方法(可以理解爲她需要教)
     */
    @Override
    public void teachCode() {
        System.out.println("我給小姐姐講了代碼實例");

        //然後小姐姐明白了(你不會還不明白吧,如果你明白了,可以把故事中的小姐姐抱走了)
        super.know();
    }
}


接下來,整個事件放進“時光機”,運行這個事件吧!

/**
 * @author CSDN程憶難
 * @link https://myhub.blog.csdn.net
 */
public class Adapter {

    public static void main(String[] args) {

        SmallSister smallSister = new SmallSister();

        //開始教小姐姐適配器模式了

        //給她講基本的概念
        smallSister.teachBasic();
        
        //給她講代碼
        smallSister.teachCode();

    }

}


來看下代碼的結構:
在這裏插入圖片描述


時光機開始運行了!
在這裏插入圖片描述
明白了嗎?明白了就把小姐姐抱走吧!


對象適配器

對象適配器在原有的例子上稍微做下修改!

講同班小姐姐類修改一下:

/**
 * 同班小姐姐類
 */
public class SmallSister implements IKnow {

    private SmallSisterKnow smallSisterKnow = new SmallSisterKnow();

    /**
     * 重寫教小姐姐的方法(可以理解爲她需要教)
     */
    @Override
    public void teachBasic() {
        System.out.println("我給小姐姐講了基本的概念");

    }

    /**
     * 重寫教小姐姐的方法(可以理解爲她需要教)
     */
    @Override
    public void teachCode() {
        System.out.println("我給小姐姐講了代碼實例");

        //然後小姐姐明白了(你不會還不明白吧,如果你明白了,可以把故事中的小姐姐抱走了)
        smallSisterKnow.know();
    }
}

現在不是繼承自目標,而是將目標實例化出來(把目標放在心上才能學會),然後讓我來教!
在這裏插入圖片描述


時光機開始!
在這裏插入圖片描述

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