Java 设计模式之适配器模式详解

 更新时间:2021年11月08日 14:55:33   作者:不侠居  
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性

定义

适配器将一个类的接口,转换成客户期望另一个接口。适配器让原本不兼容的类可以合作无间

结构图

在这里插入图片描述

如图所示,两脚插头如何能插入三脚插座,可以在中间加一个适配器进行转换,就能实现两脚插头能插入三脚插座。

使用场景

  • 新的代码兼容旧的代码
  • 使用别人好的代码到自己的代码中

代码实现

适配器模式有:对象适配器和类适配器

Java代码实现

java没有多继承,只能实现对象适配器
先创建两个接口

// 适配目标接口
public interface Target{
	public void aaa();
}
// 适配者接口
public interface Adaptee{
	public void bbb();
}

实现这两个接口

public class Targetimpl implements Target{
	public void aaa(){
		System.out.printnln("Target")
	}
}
public class Adapteeimpl implements Adaptee{
	public void bbb(){
		System.out.printnln("Adaptee")
	}
}

制作适配器
需要实现要适配成什么接口,需要实现什么接口

public class Adapter implements Target{
	Adaptee adaptee;
	public Adapter(Adaptee adapter){
		this.adaptee = adaptee;
	}
	public void aaa(){
		adaptee.bbb()
	}
}
public class Run{
	public static void main(String[] args){
		Adaptee adaptee = new Adatee();
		Target target = new Targetimpl();
		Target adapter = new Adapter(target);
		adaptee.aaa();
		target.bbb();
		adapter.aaa();
	}
}

运行结果:

Target
Adaptee
Adaptee

Python代码实现

Python可以实现对象适配器和类适配器

这是对象适配器

# 适配目标
class Target(object):
    def aaa(self):
        print("Target")
# 被适配者
class Adaptee(object):
    def bbb(self):
        print("Adaptee")

# 这是适配器
class Adapter(Target):
    def __init__(self, Adaptee):
        self.Adaptee = Adaptee
        
    def aaa(self):
        self.Adaptee.bbb()

target = Target()
adaptee = Adaptee()
adapter = Adapter(adaptee)
target.aaa()
adaptee.bbb()
adapter.aaa()

运行结果:

Target
Adaptee
Adaptee

这是类适配器

class Target(object):
    def aaa(self):
        print("Target")

class Adaptee(object):
    def bbb(self):
        print("Adaptee")

class Adapter(Target, Adaptee):
    def aaa(self):
        self.bbb()

target = Target()
adaptee = Adaptee()
adapter = Adapter()
target.aaa()
adaptee.bbb()
adapter.aaa()

运行结果:

Target
Adaptee
Adaptee

到此这篇关于Java 设计模式之适配器模式详解的文章就介绍到这了,更多相关Java 设计模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合FastDFS中间件实现文件分布管理

    SpringBoot整合FastDFS中间件实现文件分布管理

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件上传、文件下载等,解决了大容量存储和负载均衡的问题,本文介绍了SpringBoot整合FastDFS中间件实现文件分布管理,需要的朋友可以参考下
    2024-08-08
  • java连接Mongodb实现增删改查

    java连接Mongodb实现增删改查

    这篇文章主要为大家详细介绍了java连接Mongodb实现增删改查,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Java中的Random()函数及两种构造方法

    Java中的Random()函数及两种构造方法

    Java中存在着两种Random函数分别是java.lang.Math.Random和java.util.Random,文中给大家介绍了random()的两种构造方法,感兴趣的朋友跟随小编一起看看吧
    2018-11-11
  • SpringBoot在idea中的 .idea和 .iml文件的作用

    SpringBoot在idea中的 .idea和 .iml文件的作用

    本文主要介绍了SpringBoot在idea中的 .idea和 .iml文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 关于Spring BeanPostProcessor的执行顺序

    关于Spring BeanPostProcessor的执行顺序

    这篇文章主要介绍了Spring BeanPostProcessor的执行顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • IDEA创建Servlet并配置web.xml的实现

    IDEA创建Servlet并配置web.xml的实现

    这篇文章主要介绍了IDEA创建Servlet并配置web.xml的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 浅谈一下Java为什么不能使用字符流读取非文本的二进制文件

    浅谈一下Java为什么不能使用字符流读取非文本的二进制文件

    这篇文章主要介绍了浅谈一下为什么不能使用字符流读取非文本的二进制文件,刚学Java的IO流部分时,书上说只能使用字节流去读取图片、视频等非文本二进制文件,不能使用字符流,否则文件会损坏,需要的朋友可以参考下
    2023-04-04
  • 从实战角度详解Disruptor高性能队列

    从实战角度详解Disruptor高性能队列

    这篇文章主要介绍了从实战角度详解Disruptor高性能队列,对正在学习这方面知识的小伙伴有很大的帮助,感兴趣的小伙伴快来一起学习吧
    2021-08-08
  • Java8中常见函数式接口的使用示例详解

    Java8中常见函数式接口的使用示例详解

    在 Java 8 中,函数式接口是一个关键的特性,它们允许将方法作为参数传递或返回类型,本文为大家整理了一些常见的函数式接口的使用,希望对大家有所帮助
    2023-12-12
  • Java中输入输出方式的简单示例

    Java中输入输出方式的简单示例

    Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象,下面这篇文章主要给大家介绍了关于Java中输入输出方式的相关资料,需要的朋友可以参考下
    2021-08-08

最新评论