IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【设计模式】结构型模式之适配器模式 -> 正文阅读

[Java知识库]【设计模式】结构型模式之适配器模式

目录

前言

定义

结构组件

分类及实现

类适配器模式(采用继承实现)

源角色及目标角色

适配器实现

测试及结果

?对象适配器模式(采用对象组合方式实现)

适配器实现

测试及结果

接口适配器模式

优缺点


前言

说起适配器模式,其实生活中有许多适配器应用的场景。比如,家里的插座只有两孔,但是电脑充电器是三孔,怎么办,这是时候就需要买一个转换头,这个转换头就是适配器。

定义

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

结构组件

目标角色(Target):就是所期待得到的接口,也就是这类的接口是符合我们要求的。

源角色(Adaptee):我们要使用的接口,但是这个接口不符合我们的要求,也就是现在需要适配的接口。

适配器角色(Adapter):适配器类是适配器模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

分类及实现

类适配器模式(采用继承实现)

源角色及目标角色

package com.inchlifc;
/**
*源角色
*/
public class Adaptee {
    public void specificRequest() {
        System.out.println("特殊请求,这个是源角色");
    }
}


package com.inchlifc;

/**
 * @description 这个是目标角色,所期待的接口
 */
public interface Target {
    public void request();
}

适配器实现

现在想要实现这个Target接口,但是不想重构,想要用上已有的Adaptee类,这时可以定义一个适配器类继承想要使用的类,并且实现期待的接口

package com.inchlifc;

class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        super.specificRequest();
    }
}

测试及结果

package com.inchlifc;

/**
 * @author inchlifc
 * @description 测试
 */
public class Test {
    public static void main(String[] args) {
        System.out.println("------>类适配器模式测试:");
        Target target = new Adapter();
        target.request();
    }
}

?对象适配器模式(采用对象组合方式实现)

源角色和目标角色与上面例子相同

适配器实现

package com.inchlifc;

class Adapter implements Target{
    private Adaptee adaptee;

    public Adapter (Adaptee adaptee) {
        this.adaptee= adaptee;
    }

    @Override
    public void request() {
        this.adaptee.specificRequest();
    }
}

测试及结果

package com.inchlifc;

/**
 * @author inchlifc
 * @description 测试
 */
public class Test {
    public static void main(String[] args) {
        System.out.println("------>对象适配器模式测试:");
        Target adapter = new Adapter(new Adaptee());
        adapter.request();
    }
}

接口适配器模式

通过抽象类实现目标接口,然后用匿名内部类来对想要的接口方法进行改造,即可完成接口适配。代码如下:?

//目标接口
package com.inchlifc;
 
public interface Interface4 {
	public void m1();
	public void m2();
	public void m3();
	public void m4();
}


//抽象类
package com.inchlifc;
 
//抽象类
public abstract class AbsAdapter implements Interface4 {
 
	//实现4接口
	public void m1() {
 
	}
 
	public void m2() {
 
	}
 
	public void m3() {
 
	}
	
	public void m4() {
		
	}

}


package com.inchlifc;
 
public class Test{
	public static void main(String[] args) {
		
		AbsAdapter absAdapter = new AbsAdapter() {
			//?只需要覆盖我们使用的接口方法
			@Override
			public void m1() {
				System.out.println("覆盖后的m1方法");
			}
 
		};
		absAdapter.m1();
	}
}

优缺点

该模式的主要优点如下:

  • 客户端通过适配器可以透明地调用目标接口。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
  • 在很多业务场景中符合开闭原则。
其缺点是:
  • 适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。
  • 增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:22:50  更:2022-03-22 20:27:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:38:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码