这篇文章主要介绍了Java经典设计模式之适配器模式,简单说明了适配器模式的概念、原理,并结合实例形式分析了java适配器模式的用法与相关注意事项,需要的朋友可以参考下

本文实例讲述了Java经典设计模式之适配器模式。分享给大家供大家参考,具体如下:

适配器模式是把一个类的接口适配成用户所期待的,使得原本由于接口不兼容而不能一起工作的一些类可以在一起工作从而实现用户所期望的功能。

适配器模式的优势:

1. 通过适配器,客户端可以调用统一接口,操作简单直接,并且代码逻辑紧凑,使用起来方便。

2. 代码复用,适配器模式就是解决因为环境要求不相同 的问题,通过适配实现代码复用。

3. 将目标类和适配器类解耦,通过新建一个适配器类来重用现在的类,不用再去重复修改原有代码,实现开闭原则。

共有两类适配器模式

1.对象适配器模式: 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。

2. 类适配器模式: 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

示例代码:

/**

* @description:

* 原有的接口功能,比如是给电动车充电功能

*/

public interface FirstBaseIf {

void charging();//充电

}

/**

* 要实现的操作功能

* @description:

*/

public class NewFunction {

public void powerWithTwo(){

System.out.println(“新功能:给电动汽车也可以充电啦”);

}

}

/**

*新建适配器类,来实现对原有接口FirstBaseIf的操作使用

* @description:

*/

public class FunctionAdapter implements FirstBaseIf {

private NewFunction plug;

public FunctionAdapter(NewFunction plug){

this.plug=plug;

}

@Override

public void charging() {//重写原有接口中的方法,从而实现接口转化

System.out.println(“通过适配器转化”);

plug.powerWithTwo();

}

}

//——–测试代码——————-

public class Test {

private FirstBaseIf plug;

public Test(FirstBaseIf plug) {

this.plug = plug;

}

public static void main(String[] args) {

NewFunction two = new NewFunction();

FirstBaseIf three = new FunctionAdapter(two);//这里就是通过适配器实现转换

Test note = new Test(three);

note.charge();

}

public void charge() {

plug.charging();//使用原有接口中的功能

}

}

运行结果:

适用场景:

在Java程序中,如果一个抽象类或者接口的话,就必须要重写所有的抽象方法。

那么,如果一个接口中定义的抽象方法过多,而子类中很多抽象方法又不需要用到,就应该设计一个适配器。通过Java语言进行的Android开发中,就经常会用到适配器模式。

java 中适配器原理_Java经典设计模式中关于适配器模式原理以及用法详解相关推荐

  1. [网络安全提高篇] 一一九.恶意软件动态分析经典沙箱Cape的安装和基础用法详解

    终于忙完初稿,开心地写一篇博客. "网络安全提高班"新的100篇文章即将开启,包括Web渗透.内网渗透.靶场搭建.CVE复现.攻击溯源.实战及CTF总结,它将更加聚焦,更加深入,也 ...

  2. java metadata 使用_java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMet ...

  3. linux中的su-命令的功能,linux su命令参数及用法详解(linux切换用户命令)

    linux su命令参数及用法详解(linux切换用户命令) 发布时间:2012-07-21 12:12:39   作者:佚名   我要评论 su的作用是变更为其它使用者的身份,超级用户除外,需要键入 ...

  4. 【Scripts系列】之Makefile中条件分支ifeq/else/endif/else ifeq/ifneq/ifdef/ifndef用法详解

    DATE: 2019-2-22 前言       条件分支的用法在任何编程语言和脚本以及逻辑中都广泛使用.前文讲述过C语言中预处理的条件编译#ifdef/#if/#elif/#else/#endif用 ...

  5. linux中whoami命令的作用是,linux whoami命令参数及用法详解(linux查看登陆用户名)

    linux whoami命令参数及用法详解(linux查看登陆用户名) 2019年05月31日 | 萬仟网科技 | 我要评论 whoami 命令显示登录名.与使用命令 who 并指定 am i 不同, ...

  6. java策略模式详解_Java经典设计模式之策略模式原理与用法详解

    本文实例讲述了Java经典设计模式之策略模式.分享给大家供大家参考,具体如下: 策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式 ...

  7. java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]

    本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...

  8. java解析日志数据_Java实时监控日志文件并输出的方法详解

    Java实时监控日志文件并输出的方法详解 想在前台显示数据同步过程中产生的日志文件,在网上找到解决方案,做了代码测试好用.这里做个记录 java.io.RandomAccessFile可以解决同时向文 ...

  9. java 查询sql语句_java执行SQL语句实现查询的通用方法详解

    完成sql查询 并将查询结果放入vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static vector executequery(class clazz, s ...

最新文章

  1. 比特币前核心开发者Mike Hearn三年前的预测一一应验
  2. [SQL] 外卖系统数据库设计
  3. 与Web集成——《跟我学Shiro》
  4. 五、朴素贝叶斯分类算法
  5. java for 循环执行顺序
  6. 【2018ACM山东省赛 - E】Sequence(树状数组,思维,优化)
  7. 【转】[你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理...
  8. C#代码调用js函数,js函数中的document.getElementById(对象ID)得null值解决办法
  9. 开启Spark history server
  10. spring源码-第三个后置处理器
  11. 初级java程序员要求_java初级程序猿需要具备的能力?
  12. 魅族一直显示无服务器,魅族手机用久了卡顿,这三个方法轻松解决
  13. 织梦php环境搭建,织梦建站入门:搭建本地PHP环境图文教程
  14. Linux查询状态的命令,LINUX常用的系统状态查询命令
  15. P5594 模拟赛(乱搞)
  16. wasc honeypot
  17. C++ 程序编译过程:从代码到程序
  18. c html保存为图片格式,【单选题】在 IE 中,若要把整个网页的文字和图片一起保存在一个文件中,则文件的类型应为 。 A. HTM B. HTML C. MHT D. TXT...
  19. php sku 代码编写,php – 在单个产品页面中显示SKU下的自定义字段值
  20. 快速建站可以怎么实现???

热门文章

  1. 30天敏捷结果(15) - 保持一个最佳状态的大脑
  2. Cisco 3550配置DHCP的实际经验
  3. 为什么浏览器不能跨域
  4. js控制只能输入数字和小数点
  5. Python处理千万级数据
  6. 将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法(亲测)
  7. 用grep和cut做一些数据统计
  8. Redis 数据同步机制分析
  9. Go的GOPATH与GOROOT
  10. 宝鸡文理学院c语言试题,宝鸡文理学院试题电子电磁场与电磁波A