亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java設計模式(6)----------適配器模式

標簽:
Java
1、介绍

适配器模式属于一种结构型的设计模式,如同名字一样,用于实现两个原本不相关的接口的连通性,即进行适配。通过适配器模式,可以扩展类的功能,使其拥有其他类的功能

适配器模式的使用场景,凡是能联系到适配这两个字的,一般都是适用的。比如说,电压适配器,通过在电源插排上接上一个电压适配器,我们的手机就可以进行充电了。比如说,读卡器,通过在电脑的USB接口上插上一个读卡器,我们的TF/SD/CF等内存卡就可以使用了。

适配器模式的实现方法,主要有继承和依赖。由于依赖关系具有更好的灵活性,而且可以一个类可以实现对多个类的依赖,所以出场率更高一些。

以依赖为例,在具体实现中,

  • 主体类依赖适配器类,两者实现相同的接口。所以对于某个动作或者方法,当主体能够完成的时候就自己完成,如果主体完成不了,就用适配器类来完成。
  • 在适配器类中,则依赖了其他的类(假设名字为A)。在适配器的对应方法中,执行的是A类的相关方法。

所以通过适配器类,将原本不存在关联的主体类和A类联系起来了。

2、案例
2.1、背景

在使用笔记本电脑的时候,我们可以查看保存在电脑硬盘上的电影。但是也经常会从朋友电脑上copy过来一些电影资源,但是碰巧,当时手头上没有U盘可以用,那么就用TF卡和SD卡进行拷贝拿了过来。通过一个读卡器(适配器),我们可以把原本没有相同接口的两个类联系起来。电脑和读卡器都具有相同的USB接口,将读卡器插到电脑上,然后把对应的内存卡插进读卡器中,就可以观看内存卡中的电影了。电脑和读卡器是依赖关系(电脑使用读卡器),读卡器与TF/SD卡也是依赖关系(读卡器使用TF/SD卡)。

对应的UML类图如下:
图片描述

2.2、实现

1)电脑接口

public interface ComputerInterface
{
    void readFilesFromHardDisk(String diskType, String fileName);
}

2)内存卡接口

public interface CardInterface
{
    void readFilesFromFlashMemory(String diskType, String fileName);
}

3)内存卡实体类

public class SDCard implements CardInterface
{
    @Override
    public void readFilesFromFlashMemory(String diskType, String fileName)
    {
        System.out.println("从SD卡放映电影:" + fileName);
    }
}
public class TFCard implements CardInterface
{
    @Override
    public void readFilesFromFlashMemory(String diskType, String fileName)
    {
        System.out.println("从TF卡放映电影:" + fileName);
    }
}

4)适配器类

public class CardAdaptor implements ComputerInterface
{
    CardInterface cardInterface;
    @Override
    public void readFilesFromHardDisk(String diskType, String fileName)
    {
        if ("SDCard".equals(diskType))
        {
            cardInterface = new SDCard();
        }
        else
        {
            cardInterface = new TFCard();
        }
        cardInterface.readFilesFromFlashMemory(diskType, fileName);
    }
}

5)电脑类

public class Computer implements ComputerInterface
{
    CardAdaptor cardAdaptor;

    @Override
    public void readFilesFromHardDisk(String diskType, String fileName)
    {
        if ("hardDisk".equals(diskType))
        {
            System.out.println("从硬盘放映电影:" + fileName);
        }
        else if ("TFCard".equals(diskType) || "SDCard".equals(diskType))
        {
            cardAdaptor = new CardAdaptor();
            cardAdaptor.readFilesFromHardDisk(diskType, fileName);
        }
        else
        {
            System.out.println("参数非法");
        }
    }
}

6)验证代码

/**
 * 验证
 */
public class Demo
{
    public static void main(String[] args)
    {
        Computer computer = new Computer();
        computer.readFilesFromHardDisk("hardDisk", "《乱世佳人》");
        computer.readFilesFromHardDisk("TFCard", "《肖申克的救赎》");
        computer.readFilesFromHardDisk("SDCard", "《教父》");
    }
}

6)运行结果

从硬盘放映电影:《乱世佳人》
从TF卡放映电影:《肖申克的救赎》
从SD卡放映电影:《教父》

Process finished with exit code 0

3、总结

凡是能与适配两个字沾边的,都可以使用适配器模式

适配器模式的优点和缺点都很明显。优点是通过适配器,联系原本不相关的类,打通二者的接口。缺点是如果在一个工程中大量使用适配器模式,对导致代码可读性变差,逻辑变得复杂。

點擊查看更多內容
4人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
1萬
獲贊與收藏
1426

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消