设计模式(11):适配器模式

一.什么使适配器模式?

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

二.模式中的角色

  • 目标角色(Target): 客气所期待的接口。目标可以是具体的或抽象的类,也可以是接口;
  • 需要适配的类(Adaptee): 需要被适配的类或适配者类;
  • 适配器(Adapter): 通过包装一个需要适配的对象,把原接口转换成目标接口。

三.工作中的场景

  • 经常用来做旧系统改造和升级;
  • 如果我们的系统开发之后再也不需要维护,那么很多模式都是没有必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍。

四.开发中的场景

  • SpringMVC中的HandlerAdapter使用了适配器模式。处理器的类型不同,处理请求的方式也不同。
  • JDBC驱动程序。不同的数据库提供商实现了不同的JDBC驱动接口,使用适配器模式可以将这些不同的接口适配为标准的JDBC接口,提高应用程序的可移植性。

五.举例代码实现

  • 1.举例: 假如我们的鼠标不是USB接口,是传统的ps/2接口,没有办法连接我们的电脑,这个时候我们需要一个转换头,把传统的ps/2转换成USB。这里我们的转换头就是适配器对象,鼠标就是被适配器对象。

  • 2.代码实现

    (1)被适配对象(Adaptee)

java 复制代码
/**
 * 被适配器(相当于键盘)
 */
public class Adaptee {
	public void request(){
		System.out.println("可以完成客户请求的需要的功能!");
	}
}

    (2)目标角色(Target)

java 复制代码
/**
 * 相当于USB 接口
 */
public interface Target {
	void handleReq();
}

    (3)适配器(Adapter)

java 复制代码
/**
 * 适配器(相当于USB和ps/2转换器)
 */
public class Adapter extends Adaptee implements Target{
	@Override
	public void handleReq() {
		super.request();
	}	
}

    (4)调用

java 复制代码
/**
 * 相当于电脑(只有USB接口)
 */
public class App {
	public void test(Target t) {
		t.handleReq();
	}
	public static void main(String[] args) {
		App c = new App();
		c.test(new Adapter());
	}	
}

    (5)使用组合的方式跟被适配对象整合

java 复制代码
/**
 * 类适配器(相当于转换器)
 * (对象适配器,使用了组合的方式跟被适配对象整合)
 */
public class Adapter implements Target{
	private Adaptee apadtee;
	public Adapter(Adaptee apadtee) {
		this.apadtee = apadtee;
	}
	@Override
	public void handleReq() {
		apadtee.request();
	}
}

    (6)调用

java 复制代码
public class App {
	public void test(Target t) {
		t.handleReq();
	}
	public static void main(String[] args) {
		App c = new App();
		Target t=new Adapter(new Adaptee());
		c.test(t);
	}	
}

更多设计模式学习:

设计模式(1):介绍

设计模式(2):单例模式

设计模式(3):工厂模式

设计模式(4):建造者模式

设计模式(5):原型模式

设计模式(6):桥接模式

设计模式(7):装饰器模式

设计模式(8):组合模式

设计模式(9):外观模式

设计模式(10):享元模式

设计模式持续更新中...

相关推荐
不想写bug呀21 分钟前
多线程案例——单例模式
java·开发语言·单例模式
心平愈三千疾1 小时前
通俗理解JVM细节-面试篇
java·jvm·数据库·面试
我不会写代码njdjnssj1 小时前
网络编程 TCP UDP
java·开发语言·jvm
第1缕阳光1 小时前
Java垃圾回收机制和三色标记算法
java·jvm
funnyZpC1 小时前
好用的文档工具👉smart-doc
java
一只叫煤球的猫1 小时前
🔥 同事混用@Transactional和TransactionTemplate被我怼了,三种事务管理到底怎么选?
java·spring boot·后端
华子w9089258599 天前
基于 SpringBoot+JSP 的医疗预约与诊断系统设计与实现
java·spring boot·后端
feifeigo1239 天前
Java 正则表达式高级用法
java·mysql·正则表达式
empti_9 天前
Java中的List实现类详解
java
亲爱的非洲野猪9 天前
一次性理解Java垃圾回收--简单直接方便面试时使用
java·jvm·面试