博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之适配器模式
阅读量:5994 次
发布时间:2019-06-20

本文共 1410 字,大约阅读时间需要 4 分钟。

    在我们的日常生活中购买笔记本电脑通常会赠送给我们一个电源适配器,通过这个适配器即使我们的电脑没有提供可以适配插座的插头也可以充电。在实际的开发中我们有时也会遇到同样的问题,这时我们就可以使用适配器模式。所谓适配器模式,就是把一个接口转化成用户所希望的接口,使用适配器模式可以让那些接口不兼容的类在一起工作。

    适配器模式有两种类型:一种叫类的适配器模式、一种叫对象的适配器模式。首先我们来介绍什么是类的适配器模式,不多说了直接上代码!

    首先定义一个目标的接口,也就是客户希望的使用的接口。

public interface Target {    public void targetMethod1();    public void targetMethod2();    }

在这个接口中有两个目标方法分别是targetMethod1和targetMethod2。接下来是我们已经有的一个实现类:

public class Adaptee {    public void targetMethod2(){       System.out.println("Adaptee的实现");        }}

在这个实现类里面只实现了一个targetMethod2方法,所以这个时候我们需要一个适配器。

public class Adapter extends Adaptee implements Target {    @Override    public void targetMethod1() {        System.out.println("Adapter的实现");    }}

客户端调用:

public static void main(String[] args) {        Target target = new Adapter();        target.targetMethod1();        target.targetMethod2();    }运行结果:Adapter的实现Adaptee的实现

通过代码可以看出适配器类是通过继承关系连接到了被适配对象。下面要介绍的对象的适配器模式使用的是组合委派的方式连接到被适配对象。其中目标接口和被适配对象不变。修改适配器类的代码:

public class Adapter implements Target {        private Adaptee apaptee;        public Adapter(Adaptee apaptee){        this.apaptee = apaptee;    }    @Override    public void targetMethod1() {        System.out.println("Adapter的实现");    }    @Override    public void targetMethod2() {        this.apaptee.targetMethod2();    }}

对于类适配器模式和对象适配器模式建议使用对象适配器模式,多用组合少用继承,当然也要根据具体的情况在具体的分析。

转载于:https://www.cnblogs.com/suyang-java/p/10350865.html

你可能感兴趣的文章
Linux常用的基本命令14
查看>>
《zabbix进程组成结构与zabbix_agentd.conf配置文件参数详解》-3
查看>>
8-22学习练习[一个viewController整合增删移动功能]
查看>>
MySQL的字符集
查看>>
Nginx+Tomcat实现反向代理及动静分离
查看>>
Linux进程管理优化及性能评估工具介绍
查看>>
python 列表
查看>>
ORACLE 10G 配置OEM/DB CONSOLE
查看>>
网路岗 - Cisco 交换机端口镜像配置图解
查看>>
Swift开发笔记2.浅谈闭包
查看>>
Exchange2013与Office365做Exchange Online混合部署(五)之迁移邮箱
查看>>
JAVA按顺序播放多个wav音频
查看>>
Oracle DataBase单实例使用ASM案例(4)--AIX系统Oracle 10g应用
查看>>
Linux流量监控工具 - iftop
查看>>
Ylmf OS4开启3D
查看>>
IP电话简单注册---CME
查看>>
TCP: time wait bucket table overflow
查看>>
查看及设定IIS内置IWAM_和IUSR_用户的密码
查看>>
如何在命令行下使用Android NDK交叉编译工具
查看>>
SpringMVC通过配置mvc:view-controller直接解析到视图页面
查看>>