在Java开发中,我们常常需要用到Java接口型模式中的适配器模式,那适配器设计模式到底是什么模式呢?

适配器模式(Adapter)就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。举个例子来说,现在一般的家用电器要求的电压都是 220V,但有个别电器要求使用110V 电压,怎么办?这时就需要用一个能把 220V 电压转换成 110V 电压的变压器,这个变压器就是一个适配器。

哪些情况我们需要使用适配器模式呢?

1、系统需要使用的类的接口不符合系统的要求。

2、要建立一个可以重复使用的类,用于与该类之间关联不大的一些类,包括工作中引进的类。

3、类的适配器模式使用起来有点像多重继承机制,利用接口的特性,把一些零散类组织到一起,成为一个新的类来实现调用,并且看起来像是对一个类的操作。实际上,适配器模式更多的是强调对代码的组织,而不是功能的实现。

Java中适配器模式有什么作用呢?

适配器模式可以方便代码的组织与模型的准确表示,可以把一个类中的成员插到另一个类的继承子类中,从而让这个继承的子类看起来像一个新类,同时可以对父类减少依赖。

了解了适配器模式的相关概念以后,我们最关心的还是它的实现,具体的设计过程是怎样的呢?

(1)定义适配器接口。代码如下:

public interface IAdapter

//适配器接口

{

String Drive();

}

(2)定义适配器类 Adapter,实现 IAdapter 接口。代码如下:

public class Adapter implements IAdapter

//适配器类

{

public String Drive()

{

return "变压器";

}

}

(3)定义改变适配器类,该类主要实现将变压器的电压从 110V 改变为 220V。代码如下:

public class ChangeAdapter

//改变适配器类

{

public String Web(String str)

{

return str;

}

}

(4)定义输出电压为 110V 的变压器类。代码如下:

public class CClass extends ChangeAdapter implements IAdapter

//实现类适配器

{

public String Drive()

{

return this.Web("(1)输出电压:110V");

}

}

(5)定义输出电压为 220V 的变压器类。代码如下:

public class CObject implements IAdapter

//实现对象适配器

{

private ChangeAdapter changeAdapter;

public CObject()

{

changeAdapter = new ChangeAdapter();

}

public String Drive()

{

return changeAdapter.Web("(2)输出电压:220V");

}

}

(6)在 main()方法中使用变压器将 110V 的电压变压为 220V。代码如下:

class Program

{

public static void main(String[] args)

{

IAdapter dap = new Adapter();

System.out.println((dap.Drive()));

dap = new CClass();

//调用第一个适配器

System.out.println((dap.Drive()));

dap = new CObject();

//调用第二个适配器

System.out.println((dap.Drive()));

}

}

以上就是Java适配器模式的作用和具体使用方法,大家遇到类似情况时,可以用上面的代码尝试实现适配器模式。最后希望小编的分享,对大家在Java编程中有帮助。

相关阅读:《Java 8 对象类型

Java设计模式中适配器模式的实现方法的更多相关文章

  1. Java设计模式之适配器模式(项目升级案例)

    今天是我学习Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一遍 ...

  2. Java设计模式(二) 工厂方法模式

    本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...

  3. JAVA项目中引用Logback的方法

    一.简介 本文主要讲JAVA项目中引入Logback的方法. 二.解决 1.引入依赖. <!--Begin LogBack Log--> <!-- https://mvnreposi ...

  4. Java设计模式中的单例模式

    有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式.设计单例模式主要采用了Java的pri ...

  5. 【转】使用JavaParser获得Java代码中的类名、方法形参列表中的参数名以及统计总的文件个数与不能解析的文件个数

    遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet<String> argNameSet, HashSet<S ...

  6. java设计模式5——适配器模式

    java设计模式5--适配器模式 1.结构型模式介绍 1.1.作用 从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类: 适配器模式 代理模式 桥接模式 装饰模式 组合模式 ...

  7. Java设计模式之四 ----- 适配器模式和桥接模式

    前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型 ...

  8. Java设计模式----初识适配器模式

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  9. Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

随机推荐

  1. Vue源码学习三 ———— Vue构造函数包装

    Vue源码学习二 是对Vue的原型对象的包装,最后从Vue的出生文件导出了 Vue这个构造函数 来到 src/core/index.js 代码是: import Vue from './instanc ...

  2. java.lang.UnsupportedOperationException 原因以及解决方案

    如下代码: Map[] cardProds = JsonUtils.getObject(oldCartValue, new TypeReference<Map[]>(){}); List& ...

  3. 云计算之KVM虚拟化实战

    1 基础环境规划 1.1 主机环境规划 系统版本 主机名 IP地址 内存 磁盘 CentOS6.9 kvm-node1 10.0.0.200 2G 20G CentOS6.9 kvm-node2 10 ...

  4. 彻底弄懂session,cookie,token

    session,cookie和token究竟是什么 简述 我在写之前看了很多篇session,cookie的文章,有的人说先有了cookie,后有了session.也有人说先有session,后有co ...

  5. PAT (Basic Level) Practice 1021 个位数统计

    个人练习 给定一个 k 位整数 N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d​0​​ (0≤d​i​​≤9, i=0,⋯,k−1, d​k−1​​>0),请编写程序统计每种 ...

  6. Choosing Capital for Treeland CodeForces - 219D (树形DP)

    传送门 The country Treeland consists of n cities, some pairs of them are connected with unidirectional  ...

  7. ZOJ3640 概率DP

    Background If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at ...

  8. DFS初级剪枝及心得

    关于DFS心得: 1.利用结构体,记录mark和题目要求的基本属性. 2.用到递归,使用递归时注意要设置出口,即符合要求时return,注意对递归的理解,对于不同情况可能要传递不同的参数,但出口都是一 ...

  9. luoguP1726 上白泽慧音

    P1726 上白泽慧音 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村 ...

  10. JQuery方法总结

    JQuery方法总结 Dom: Attribute:(属性) $("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img"). ...