一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java適配器模式之萬物擬人化

java適配器模式之萬物擬人化

2021-12-03 15:09二當(dāng)家的白帽子 Java教程

本文詳細(xì)介紹了什么是適配器模式,適配器模式的種類以及各種類的詳細(xì)講解等,需要學(xué)習(xí)該知識(shí)點(diǎn)的小伙伴可以參考這篇文章

什么是適配器模式

以下是百科的解釋。

在計(jì)算機(jī)編程中,適配器模式(有時(shí)候也稱包裝樣式或者包裝)將一個(gè)類的接口適配成用戶所期待的。一個(gè)適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念惞ぷ髟谝黄穑龇ㄊ菍㈩愖约旱慕涌诎谝粋€(gè)已存在的類中。

共有兩類適配器模式:

  • 類適配器模式:

這種適配器模式下,適配器繼承自已實(shí)現(xiàn)的類(一般多重繼承)。

  • 對(duì)象適配器模式:

在這種適配器模式中,適配器容納一個(gè)它包裹的類的實(shí)例。在這種情況下,適配器調(diào)用被包裹對(duì)象。

設(shè)計(jì)模式和編程語言無關(guān),但是二當(dāng)家的依然用Java語言去實(shí)戰(zhàn)舉例。


類的適配器模式

java適配器模式之萬物擬人化

  • 源(Adapee)角色:現(xiàn)在需要適配的接口。
  • 目標(biāo)(Target)角色:這就是所期待得到的接口。注意:由于這里討論的是類適配器模式,因此目標(biāo)不可以是類。
  • 適配器(Adaper)角色:適配器類是本模式的核心。適配器把源接口轉(zhuǎn)換成目標(biāo)接口。顯然,這一角色不可以是接口,而必須是具體類。

源(Adapee)角色

二當(dāng)家喜歡狗狗,所以養(yǎng)了一只狗狗,他有時(shí)候會(huì)發(fā)出叫聲。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.secondgod.adapter;
 
/**
 * 狗狗
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Dog {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("狗狗:汪汪汪。。。。。。");
    }
}

目標(biāo)(Target)角色

我們會(huì)和朋友聊天說話。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.secondgod.adapter;
 
/**
 * 朋友
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public interface IFriend {
    /**
     * 說話
     */
    void speak();
}

適配器(Adaper)角色

過了一段時(shí)間,二當(dāng)家把狗狗當(dāng)成了朋友,覺得它不是在叫,而是在說話。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.secondgod.adapter;
 
/**
 * 狗狗朋友
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class DogFriend extends Dog implements IFriend {
    /**
     * 說話了
     */
    @Override
    public void speak() {
        super.makeSound();
    }
}

我們測(cè)試一下和狗狗朋友的說話。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.secondgod.adapter;
 
/**
 * 人
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Person {
    /**
     * 和朋友聊天
     *
     * @param friend
     */
    public void speakTo(IFriend friend) {
        System.out.println("人:朋友,你干什么呢?");
        friend.speak();
    }
 
    public static void main(String[] args) {
        Person  person = new Person();
        IFriend friend = new DogFriend();
        person.speakTo(friend);
    }
}

java適配器模式之萬物擬人化

二當(dāng)家的說一句,狗狗叫一聲,我們真的像是在聊天。


增加源(Adapee)角色的后果

有一天,二當(dāng)家的又養(yǎng)了一只貓貓。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.secondgod.adapter;
 
/**
 * 貓貓
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Cat {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("貓貓:喵喵喵。。。。。。");
    }
}

過了幾天,二當(dāng)家的和貓貓也成了朋友。這時(shí)候只好再多增加一個(gè)貓朋友類。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.secondgod.adapter;
 
/**
 * 貓貓朋友
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class CatFriend extends Cat implements IFriend {
    /**
     * 說話了
     */
    @Override
    public void speak() {
        super.makeSound();
    }
}

二當(dāng)家的和狗朋友,貓朋友聊天。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.secondgod.adapter;
 
/**
 * 人
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Person {
    /**
     * 和朋友聊天
     *
     * @param friend
     */
    public void speakTo(IFriend friend) {
        System.out.println("人:朋友,你干什么呢?");
        friend.speak();
    }
 
    public static void main(String[] args) {
        Person  person = new Person();
        IFriend dogFriend = new DogFriend();
        IFriend catFriend = new CatFriend();
        person.speakTo(dogFriend);
        person.speakTo(catFriend);
    }
}

java適配器模式之萬物擬人化

以后要是二當(dāng)家的再有其他動(dòng)物朋友,就需要再去增加適配器類。有沒有辦法通用一點(diǎn)呢?


對(duì)象的適配器模式

二當(dāng)家的希望可以有一個(gè)和各種動(dòng)物做朋友的辦法,而不是每次有了新的動(dòng)物朋友都需要增加一個(gè)適配器。

java適配器模式之萬物擬人化


增加一個(gè)動(dòng)物接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.secondgod.adapter;
 
/**
 * 動(dòng)物
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public interface IAnimal {
 
    /**
     * 發(fā)出聲音
     */
    void makeSound();
}

讓源(Adapee)角色的貓貓和狗狗實(shí)現(xiàn)動(dòng)物接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.secondgod.adapter;
 
/**
 * 狗狗
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Dog implements IAnimal {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("狗狗:汪汪汪。。。。。。");
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.secondgod.adapter;
 
/**
 * 貓貓
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Cat implements IAnimal {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("貓貓:喵喵喵。。。。。。");
    }
}

萬物擬人適配器(Adaper)角色

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.secondgod.adapter;
 
/**
 * 萬物擬人適配器
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class AnimalFriendAdaper implements IFriend {
    /**
     * 被擬人化的動(dòng)物朋友
     */
    private IAnimal animal;
 
    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }
 
    @Override
    public void speak() {
        animal.makeSound();
    }
}

測(cè)試我們的萬物擬人適配器。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.secondgod.adapter;
 
/**
 * 人
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Person {
    /**
     * 和朋友聊天
     *
     * @param friend
     */
    public void speakTo(IFriend friend) {
        System.out.println("人:朋友,你干什么呢?");
        friend.speak();
    }
 
    public static void main(String[] args) {
        // 一個(gè)人
        Person  person = new Person();
        // 一只狗
        IAnimal dog = new Dog();
        // 一只貓
        IAnimal cat = new Cat();
        // 萬物擬人
        person.speakTo(new AnimalFriendAdaper(dog));
        person.speakTo(new AnimalFriendAdaper(cat));
    }
}

java適配器模式之萬物擬人化

太好了。和動(dòng)物做朋友輕松多了。因?yàn)橛辛巳f物擬人的適配器。


缺省適配模式

java適配器模式之萬物擬人化


目標(biāo)(Target)角色增加行為聲明

有一天,朋友的標(biāo)準(zhǔn)變了。必須得會(huì)碼磚才行。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.secondgod.adapter;
 
/**
 * 朋友
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public interface IFriend {
    /**
     * 說話
     */
    void speak();
 
    /**
     * 碼起來
     */
    void coding();
}

適配器(Adaper)角色必須跟著增加行為實(shí)現(xiàn)

修改后的萬物擬人適配器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.secondgod.adapter;
 
/**
 * 萬物擬人適配器
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class AnimalFriendAdaper implements IFriend {
    /**
     * 被擬人化的動(dòng)物朋友
     */
    private IAnimal animal;
 
    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }
 
    @Override
    public void speak() {
        animal.makeSound();
    }
 
    @Override
    public void coding() {
        System.out.println("動(dòng)物:笑而不語搖搖頭。。。。。。");
    }
}

缺省適配器

二當(dāng)家的想和動(dòng)物做朋友,但是不想去考慮他們?nèi)绾未a磚,以后二當(dāng)家的要是和植物做朋友,還得為植物朋友也實(shí)現(xiàn)碼磚行為,煩哦。所以我們來個(gè)默認(rèn)空實(shí)現(xiàn)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.secondgod.adapter;
 
/**
 * 缺省適配器
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public abstract class FriendAdaper implements IFriend {
    @Override
    public void speak() {
 
    }
 
    @Override
    public void coding() {
 
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.secondgod.adapter;
 
/**
 * 萬物擬人適配器
 *
 * @author 二當(dāng)家的白帽子 https://le-yi.blog.csdn.net/
 */
public class AnimalFriendAdaper extends FriendAdaper {
    /**
     * 被擬人化的動(dòng)物朋友
     */
    private IAnimal animal;
 
    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }
 
    @Override
    public void speak() {
        animal.makeSound();
    }
}

由于多了一個(gè)默認(rèn)實(shí)現(xiàn),我們就不需要為萬物適配器實(shí)現(xiàn)碼磚行為了。

適配器模式的用意是要改變?cè)吹慕涌冢员阌谀繕?biāo)接口相容。缺省適配的用意稍有不同,它是為了方便建立一個(gè)不平庸的適配器類而提供的一種平庸實(shí)現(xiàn)。

在任何時(shí)候,如果不準(zhǔn)備實(shí)現(xiàn)一個(gè)接口的所有方法時(shí),就可以使用“缺省適配模式”制造一個(gè)抽象類,給出所有方法的平庸的具體實(shí)現(xiàn)。這樣,從這個(gè)抽象類再繼承下去的子類就不必實(shí)現(xiàn)所有的方法了。

到此這篇關(guān)于java適配器模式之萬物擬人化的文章就介紹到這了,更多相關(guān)java適配器模式內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/leyi520/article/details/119730567

延伸 · 閱讀

精彩推薦
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒有升過級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
主站蜘蛛池模板: 欧美一级视频在线 | 色老头综合网 | 动漫女性扒开尿口羞羞漫画 | 国产精品久久久久久久久免费 | 久久AV国产麻豆HD真实乱 | 男同桌扒开女同桌胸罩喝奶 | 污污免费 | 欧美日韩1区2区 | 亚洲品质自拍网站 | 99视频在线观看视频一区 | 欧美成人中文字幕 | 亚洲男人天堂影院 | 免费超级乱淫视频播放性 | 美女黄板视频 | 国产永久在线观看 | 动漫美女隐私尿口图片 | 99网站在线观看 | 喷潮女王cytherea全部视频 | 91久操| 日本护士撒尿xxxx18 | 亚洲午夜精品久久久久 | 免费视频 | 无限资源在线观看8 | 女子监狱第二季未删减在线看 | 天堂a免费视频在线观看 | 操比网| 亚洲国产成人精品 | yy111111影院理论大片 | 香蕉成人999视频 | 亚洲天天做夜夜做天天欢 | 动漫jk美女被爆羞羞漫画 | 视频免费视频观看网站 | 欧美a大片| 手机在线观看网站免费视频 | 国产高清视频免费最新在线 | 日本老妇乱子伦中文视频 | 97国产精品久久碰碰牛牛 | 日韩成人在线视频 | 日本人成在线视频免费播放 | 香蕉久久久| 亚洲国产精品二区久久 |