适配器模式

本文转发自技术世界,原文链接
http://www.jasongj.com/design_pattern/adapter/

适配器模式介绍

适配器模式定义

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

适配器模式类图

适配器模式类图如下:
这里写图片描述

目标接口

public interface ITarget {
  void request();
}

目标接口实现

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConcreteTarget implements ITarget {
  private static Logger LOG = LoggerFactory.getLogger(ConcreteTarget.class);
  @Override
  public void request() {
    LOG.info("ConcreteTarget.request()");
  }
}

待适配类,其接口名为onRequest,而非目标接口request

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Adaptee {
  private static Logger LOGGER = LoggerFactory.getLogger(ConcreteTarget.class);
  public void onRequest() {
    LOGGER.info("Adaptee.onRequest()");
  }
}

适配器类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jasongj.adaptee.Adaptee;
public class Adapter implements ITarget {
  private static Logger LOG = LoggerFactory.getLogger(Adapter.class);
  private Adaptee adaptee = new Adaptee();
  @Override
  public void request() {
    LOG.info("Adapter.request");
    adaptee.onRequest();
  }
}

从上面代码可看出,适配器类实际上是目标接口的类,因为持有待适配类的实例,所以可以在适配器类的目标接口被调用时,调用待适配对象的接口,而客户端并不需要知道二者接口的不同。通过这种方式,客户端可以使用统一的接口使用不同接口的类。

public class AdapterClient {
  public static void main(String[] args) {
    ITarget adapter = new Adapter();
    adapter.request();
    ITarget target = new ConcreteTarget();
    target.request();
  }
}

适配器模式适用场景

  • 调用双方接口不一致且都不容易修改时,可以使用适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
  • 多个组件功能类似,但接口不统一且可能会经常切换时,可使用适配器模式,使得客户端可以以统一的接口使用它们
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值