最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年08月26日 08:38:09   作者:二當家的白帽子  
本文詳細介紹了什么是適配器模式,適配器模式的種類以及各種類的詳細講解等,需要學習該知識點的小伙伴可以參考這篇文章

什么是適配器模式

以下是百科的解釋。

在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中。

共有兩類適配器模式:

  • 類適配器模式:

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

  • 對象適配器模式:

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

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


類的適配器模式

img

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

源(Adapee)角色

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

package com.secondgod.adapter;

/**
 * 狗狗
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Dog {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("狗狗:汪汪汪。。。。。。");
    }
}

目標(Target)角色

我們會和朋友聊天說話。

package com.secondgod.adapter;

/**
 * 朋友
 * 
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public interface IFriend {
    /**
     * 說話
     */
    void speak();
}

適配器(Adaper)角色

過了一段時間,二當家把狗狗當成了朋友,覺得它不是在叫,而是在說話。

package com.secondgod.adapter;

/**
 * 狗狗朋友
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class DogFriend extends Dog implements IFriend {
    /**
     * 說話了
     */
    @Override
    public void speak() {
        super.makeSound();
    }
}

我們測試一下和狗狗朋友的說話。

package com.secondgod.adapter;

/**
 * 人
 *
 * @author 二當家的白帽子 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);
    }
}

在這里插入圖片描述

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


增加源(Adapee)角色的后果

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

package com.secondgod.adapter;

/**
 * 貓貓
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Cat {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("貓貓:喵喵喵。。。。。。");
    }
}

過了幾天,二當家的和貓貓也成了朋友。這時候只好再多增加一個貓朋友類。

package com.secondgod.adapter;

/**
 * 貓貓朋友
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class CatFriend extends Cat implements IFriend {
    /**
     * 說話了
     */
    @Override
    public void speak() {
        super.makeSound();
    }
}

二當家的和狗朋友,貓朋友聊天。

package com.secondgod.adapter;

/**
 * 人
 *
 * @author 二當家的白帽子 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);
    }
}

在這里插入圖片描述

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


對象的適配器模式

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

在這里插入圖片描述


增加一個動物接口

package com.secondgod.adapter;

/**
 * 動物
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public interface IAnimal {

    /**
     * 發(fā)出聲音
     */
    void makeSound();
}

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

package com.secondgod.adapter;

/**
 * 狗狗
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Dog implements IAnimal {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("狗狗:汪汪汪。。。。。。");
    }
}
package com.secondgod.adapter;

/**
 * 貓貓
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class Cat implements IAnimal {
    /**
     * 發(fā)出聲音
     */
    public void makeSound() {
        System.out.println("貓貓:喵喵喵。。。。。。");
    }
}

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

package com.secondgod.adapter;

/**
 * 萬物擬人適配器
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class AnimalFriendAdaper implements IFriend {
    /**
     * 被擬人化的動物朋友
     */
    private IAnimal animal;

    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }

    @Override
    public void speak() {
        animal.makeSound();
    }
}

測試我們的萬物擬人適配器。

package com.secondgod.adapter;

/**
 * 人
 *
 * @author 二當家的白帽子 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();
        // 一只狗
        IAnimal dog = new Dog();
        // 一只貓
        IAnimal cat = new Cat();
        // 萬物擬人
        person.speakTo(new AnimalFriendAdaper(dog));
        person.speakTo(new AnimalFriendAdaper(cat));
    }
}

在這里插入圖片描述

太好了。和動物做朋友輕松多了。因為有了萬物擬人的適配器。


缺省適配模式

在這里插入圖片描述


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

有一天,朋友的標準變了。必須得會碼磚才行。

package com.secondgod.adapter;

/**
 * 朋友
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public interface IFriend {
    /**
     * 說話
     */
    void speak();

    /**
     * 碼起來
     */
    void coding();
}

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

修改后的萬物擬人適配器

package com.secondgod.adapter;

/**
 * 萬物擬人適配器
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class AnimalFriendAdaper implements IFriend {
    /**
     * 被擬人化的動物朋友
     */
    private IAnimal animal;

    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }

    @Override
    public void speak() {
        animal.makeSound();
    }

    @Override
    public void coding() {
        System.out.println("動物:笑而不語搖搖頭。。。。。。");
    }
}

缺省適配器

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

package com.secondgod.adapter;

/**
 * 缺省適配器
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public abstract class FriendAdaper implements IFriend {
    @Override
    public void speak() {

    }

    @Override
    public void coding() {

    }
}
package com.secondgod.adapter;

/**
 * 萬物擬人適配器
 *
 * @author 二當家的白帽子 https://le-yi.blog.csdn.net/
 */
public class AnimalFriendAdaper extends FriendAdaper {
    /**
     * 被擬人化的動物朋友
     */
    private IAnimal animal;

    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }

    @Override
    public void speak() {
        animal.makeSound();
    }
}

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

適配器模式的用意是要改變源的接口,以便于目標接口相容。缺省適配的用意稍有不同,它是為了方便建立一個不平庸的適配器類而提供的一種平庸實現(xiàn)。

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

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

相關(guān)文章

  • Java Method類及invoke方法原理解析

    Java Method類及invoke方法原理解析

    這篇文章主要介紹了Java Method類及invoke方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Eureka源碼解析服務離線狀態(tài)變更

    Eureka源碼解析服務離線狀態(tài)變更

    這篇文章主要為大家介紹了Eureka源碼解析服務離線的狀態(tài)變更示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Java?Synchronize底層原理總結(jié)

    Java?Synchronize底層原理總結(jié)

    這篇文章主要給大家總結(jié)了Java?Synchronize底層原理,文中的圖文講解介紹的非常詳細,對我們學習Java?Synchronize有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • 聊聊Java 中的線程中斷

    聊聊Java 中的線程中斷

    這篇文章主要介紹了Java 中的線程中斷的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • java中匿名內(nèi)部類詳解

    java中匿名內(nèi)部類詳解

    這篇文章主要對java中的匿名內(nèi)部類的詳細總結(jié),需要的朋友可以參考下
    2017-04-04
  • idea右鍵沒有java class選項問題解決方案

    idea右鍵沒有java class選項問題解決方案

    這篇文章主要介紹了idea右鍵沒有java class選項問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 打包部署若依(RuoYi)SpringBoot后端和Vue前端圖文教程

    打包部署若依(RuoYi)SpringBoot后端和Vue前端圖文教程

    若依是一個使用Spring Boot作為后端和Vue.js作為前端的全棧應用開發(fā)平臺,下面這篇文章主要給大家介紹了關(guān)于打包部署若依(RuoYi)SpringBoot后端和Vue前端的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Java調(diào)用SSE流式接口并流式返回給前端實現(xiàn)打字輸出效果

    Java調(diào)用SSE流式接口并流式返回給前端實現(xiàn)打字輸出效果

    在Web開發(fā)中,有時我們需要將文件以流的形式返回給前端,下面這篇文章主要給大家介紹了關(guān)于Java調(diào)用SSE流式接口并流式返回給前端實現(xiàn)打字輸出效果的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Java讀寫txt文件代碼實例

    Java讀寫txt文件代碼實例

    這篇文章主要給大家介紹了關(guān)于Java讀寫txt文件的相關(guān)資料,近期處理的數(shù)據(jù)規(guī)模比較大,正好又是統(tǒng)計合并的事情,想著借助excel就可以完成了,然后就了解了下java讀取excel的事情,需要的朋友可以參考下
    2023-09-09
  • 基于selenium-java封裝chrome、firefox、phantomjs實現(xiàn)爬蟲

    基于selenium-java封裝chrome、firefox、phantomjs實現(xiàn)爬蟲

    這篇文章主要介紹了基于selenium-java封裝chrome、firefox、phantomjs實現(xiàn)爬蟲,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2020-10-10

最新評論

达孜县| 理塘县| 中江县| 九江市| 富宁县| 清丰县| 东山县| 阳原县| 东明县| 平泉县| 新邵县| 同德县| 浠水县| 清涧县| 福清市| 绥江县| 永嘉县| 博客| 宁津县| 雅安市| 沙湾县| 广宗县| 林甸县| 宁远县| 常德市| 绵阳市| 马尔康县| 黎城县| 民勤县| 迭部县| 兰州市| 自贡市| 淮南市| 青冈县| 日照市| 新乐市| 阳东县| 阜平县| 汉源县| 平乡县| 霍山县|