文档章节

适配器(Adaptor)设计模式

蔡蔡先生
 蔡蔡先生
发布于 2017/05/15 15:13
字数 835
阅读 15
收藏 0
点赞 0
评论 0

1.1. 什么是适配器

生活中的适配器:

电源适配器:将原本不满足使用要求的220V交流电转换成符合使用要求的直流电;

调制解调器:将电信号和光信号之间相互转换;

适配器模式:

一种设计模式,解决的问题就是:

 将原来不符合使用要求的东西转换成符合使用要求的东西;

1.2. Java中的适配器

java中,根据转换对象的不同,可以将适配器分为三类:

类的适配;对象的适配;接口的适配;

需求:看下列程序,分别书写实现类满足User类的需求;

interface Inter{//接口
	public void method1();
	public void method2();
	public void method3();
	public void method4();
	public void method5();
}
class User{//用户类
	public static void test1(Inter i){
		i.method1();
		i.method2();
	}
	public static void test2(Inter i){
		i.method2();
	}
	public static void test3(Inter i){
		i.method4();
	}
}

问题:因为多个实现类中只使用了接口中的某几个方法,但是不得不实现接口中所有方法,造成方法的大量浪费

解决思路:

可以专门使用一个类来实现接口,然后让其他类都来继承这个实现类,在其他的继承的类中就只需要重写需要的功能,不需要写多个无用的方法;

使用适配器类对接口进行适配,具体的业务逻辑类(实现具体功能的类)就不需要直接和接口打交道,可以只关心具体的业务逻辑;

interface Inter{//接口
    public void method1();
    public void method2();
    public void method3();
    public void method4();
    public void method5();
}
class User{//用户类
    public static void test1(Inter i){
        i.method1();
        i.method2();
    }
    public static void test2(Inter i){
        i.method2();
    }
    public static void test3(Inter i){
        i.method4();
    }
}
/*
根据需求,需要写三个实现类,分别实现接口Inter,分别供User类的三个方法使用;
*/
//首先专门创建一个类,实现接口
//一般因为这个类,只是实现接口中的所有抽象函数,
//没有具体的有意义的功能,所以一般不允许创建这个类的对象;
//因为其他类还要继承它,又不想让它创建对象,所以需要声明为抽象类
abstract class Adaptor implements Inter{
    public void method1(){}
    public void method2(){}
    public void method3(){}
    public void method4(){}
    public void method5(){}
}
class InterImpl1  extends Adaptor{
    public void method1(){
        System.out.println("method1   实现1");
    }
    public void method2(){
        System.out.println("method2   实现1");
    }
}
class InterImpl2  extends Adaptor{
    public void method2(){
        System.out.println("method2   实现2");
    }
}
class InterImpl3  extends Adaptor{
    public void method4(){
        System.out.println("method4   实现3");
    }
}

1.3. 适配器小结

适配器的作用,就是适配、转换,将不符合使用要求的东西转换为符合使用要求的;

适配器设计模式,解决的是怎么将不符合使用要求的类、对象或接口转换为符合使用要求的;

根据适配的对象不同,可以将适配器分为类的适配、对象的适配和接口的适配;

接口的适配的步骤:

1、创建一个适配器类实现接口,在这个类中使用空实现实现接口中的所有抽象函数;

2、因为适配器类中的函数都是空实现的,创建该类的对象没有意义,所以要将适配器类定义为抽象类;

3、要使用适配器类,只需书写类继承适配器类即可;

© 著作权归作者所有

共有 人打赏支持
蔡蔡先生
粉丝 1
博文 9
码字总数 8848
作品 0
闵行
程序员
设计模式——适配器模式(adpter模式)

适配器模式:按照字面理解可以理解为要适应要配合才能一起很好的工作。 专业定义:把一个类的API转换成用户期望的另一种API,让原本不能在一起工作的类能够在一起工作。如果理解起来不是很明...

姬鑫
2015/05/16
0
0
3、适配器模式

定义: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 角色: 目标角色(Target):就是所期待得到的接口,也就是这...

晚天吹凉风
02/23
0
0
Happy 设计模式之适配器模式(JAVA)

设计模式-适配器模式 适配器模式定义 适配器模式,将一个类的的接口转换成客户或者产品希望的接口形式,就是原本不兼容或者甚至不相干的接口不能一起工作的接口一起工作,完成需求或者客户的...

豆芽菜橙
07/03
0
0
Java经典设计模式-结构型模式-适配器模式(Adapter)

适配器模式 适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的...

Idea
01/20
0
0
iOS设计模式--适配器模式与观察者模式

何为适配器模式? 适配器模式,可以这么说,用于连接两种不同种类的对象,使其毫无问题地协同工作。有时它也称为包装器。其思想相当简单,适配器实现客户端所要的某种接口的行为,同时,它又...

国士梅花
2015/08/20
0
0
设计模式知识梳理(1) - 结构型 - 适配器模式

一、基本概念 1.1 定义 适配器模式 将 某个类的接口 转换成 客户端期望的另一个接口 来表示,让原本因接口不能一起工作的两个类可以协同工作。 经典的适配器模式 可以分为下面三类: 类 的适...

泽毛
06/24
0
0
结构型模式--适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。首先,...

shanxi_liyong
2014/11/19
0
0
小菜学设计模式——设计模式总结之结构型

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/06
0
0
你需要了解的23种JavaScript设计模式

为什么要学习设计模式? 在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的...

java高级架构牛人
06/02
0
0
适配器模式2-对象的适配器模式

与类的适配器模式一样,对象的适配器模式吧被适配的类的api转换成目标类的api,但是与类的适配器模式不同的是,对象的适配器模式是使用的委派关系连接到adaptee类。 模式所涉及的角色如下: ...

gavin_jin
2012/03/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 复制对象有哪些方式

java 复制对象有哪些方式 Apache的 Common beanutils库 org.apache.commons.beanutils.BeanUtils.copyProperties(dest,origin); Springframework 的BeanUtil 依赖: <dependency> ......

黄威
17分钟前
0
0
1.13 单用户模式

命令 init 6 #重启,reboot或shutdown -r now init 0 #重启,poweroff 单用户模式:密码忘记情况下 主机重启,按方向键↑,选择CentOS Linux (3.10.0-514.e17.X86 64) 7 (Core),按e键编辑...

小丑鱼00
19分钟前
1
0
jstack的简单使用

公司测试反应, 一个java应用的机器,cpu始终是30%, 即使不做交易, 于是想到了之前看到的jstack文章, 实践步骤记录一下: 1, 找出java应用的进程号 ps -ef|grep 应用名|grep -v grep 2, 找出pid...

零二一七
24分钟前
0
0
崛起于Springboot2.X之项目war打包部署(18)

将springboot项目打包步骤: 1、启动类 extends SpringBootServletInitializer 2、启动类添加覆盖方法 @Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder......

木九天
33分钟前
1
0
导入CSV文件就行数据整理分析

#-*-coding:utf-8-*-import csv,os,re,mathlocalPath=input("请输入所有群文件的根目录:") #所有QQ群文件的物理根目录路径def info(): info_dic=[] dirList=os.listdi...

Kefy
39分钟前
0
0
CoreText进阶(六)-内容大小计算和自动布局

CoreText进阶(六)-内容大小计算和自动布局 其它文章: CoreText 入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更...

aron1992
40分钟前
0
0
一个Unity高人的博客,涉猎范围很广,深度也很深。

https://blog.csdn.net/ecidevilin/article/list/

爽歪歪ES
42分钟前
0
0
Spring Cloud Config-Git后端

EnvironmentRepository的默认实现使用Git后端,这对于管理升级和物理环境以及审核更改非常方便。要更改存储库的位置,可以在Config Server中设置“spring.cloud.config.server.git.uri”配置...

itcloud
44分钟前
1
0
centos7 卸载mysql

[root@zyf ~]# rpm -qa|grep -i mysqlmysql-community-libs-5.6.34-2.el7.x86_64mysql-community-server-5.6.34-2.el7.x86_64mysql-community-release-el7-5.noarchmysql-community-......

Yao--靠自己
52分钟前
0
0
【Spring 系列 条件注解】

Spring 提供了按条件注册Bean的功能涉及到两个组件分别是:核心接口Condition,核心注解Conditional。 1、示例说明 为了演示条件注解的效果,需要定义一个属性文件,然后根据属性文件中配置的...

HansonReal
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部