【java设计模式】适配器模式(结构型模式)

简单理解适配器模式

很多智能机都会有一个内存卡卡槽用来扩展内存,有时候我们想从电脑往内存卡里面拉点电影以便出门途中用来打发时间,但电脑不能直接插内存卡,这时候就用到了读卡器,读卡器就是今天要说的适配器

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

使用场景

  • 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。
  • 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

结构

在这里插入图片描述

  • Traget(目标抽象类)
  • Adapter(适配器类)
  • Adaptee(适配者类)
  • Client(客户类)

实现代码

Target:USB(USB接口)

Adaptee:MemoryCard(内存卡)

Adapter:CardReader(读卡器):

Client:Client(电脑)

类适配器

Target

public interface USB {
    void handleReq();
}

Adaptee

public class MemoryCard {
    public void doSomething(){
        System.out.println("开始处理数据...");
    }
}

Adapter

public class CardReader extends MemoryCard implements USB {
    @Override
    public void handleReq() {
        super.doSomething();
    }
}

Client

public class Client {
    public static void main(String[] args) {
        // 使用读卡器处理数据
        CardReader cardReader = new CardReader();
        cardReader.handleReq();
    }
}

对象适配器

Target

public interface USB {
    void handleReq();
}

Adaptee

public class MemoryCard {
    public void doSomething(){
        System.out.println("开始处理数据...");
    }
}

Adapter

public class CardReader implements USB {

    private MemoryCard memoryCard;

    public CardReader(MemoryCard memoryCard) {
        this.memoryCard = memoryCard;
    }

    @Override
    public void handleReq() {
        memoryCard.doSomething();
    }
}

Client

public class Client {
    public static void main(String[] args) {
        CardReader cardReader = new CardReader(new MemoryCard());
        cardReader.handleReq();
    }
}

区别

  • 类适配器:对象继承的方式,静态的定义。
  • 对象适配器:依赖于对象的组合,都是采用对象组合的方式,也就是对象适配器实现的方式。

适配器模式的优缺点

优点

  • 可以让任何两个没有关联的类一起运行
  • 提高了类的复用,想使用现有的类,而此类的接口标准又不符合现有系统的需要。通过适配器模式就可以让这些功能得到更好的复用。
  • 增加了类的透明度,客户端只关注结果
  • 使用适配器的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

缺点

  • 过多使用会导致系统凌乱,追溯困难(内部转发导致,调用A适配成B)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值