适配器模式(java版)

什么是适配器模式?

将一个类的接口转换成客户希望的另外一个接口,使原来由于不兼容而不能一起工作的类可以一起工作。

什么场景下使用适配器模式?

比如我们要复用早期的一些代码或者第三方库或者别人维护的代码的时候,但这些代码提供的接口和我们此时的使用环境不兼容,我们又不能去修改这些代码,于是就需要使用适配器去适配这些接口以方便使用。

使用一个已经存在的类,但如果它的方法和你的要求不相同时,就应该考虑用适配器模式。

注意:适配器模式在详细设计阶段(开发阶段)不要考虑它,这个是维护或者扩展已有功能系统才需要考虑使用的。

适配器模式主要包括两种类型:

类适配器模式和对象适配器模式。

类适配器模式:

类适配器是通过继承被适配接口的实现类和实现目标接口来创建的。这样可以把该适配器作为一个目标接口的实现类,又可以在该实现类中调用被适配接口的方法。从而达到适配的目的。

例子:

//目标角色

public interface  Target{

public void request();

}

//源角色

public class Adaptee{

//原有的业务

public void doSomething(){

System.out.println("a b c ");

}

}

//适配器角色

public class  Adapter extends Adaptee implements Target{

public void request(){

super.doSomething();

}

}

对象适配器模式:

通过在适配器类的内部包装一个被适配的类对象,从而把源接口转换成目标接口,其中适配器类时目标类的子类或者实现。

例子:

//目标角色

public interface  Target{

public void request();

}

//源角色

public class Adaptee{

//原有的业务

public void doSomething(){

System.out.println("a b c ");

}

}

//适配器角色

public class  Adapter  implements Target{

private Adaptee adaptee = new Adaptee();

public void request(){

adaptee.doSomething();

}

}

对象适配器和类适配器的区别:

类适配器是类间继承,但由于java中不允许多继承,因此当需要适配多个类的时候,我们使用对象适配器,对象适配器是对象的合成关系或者说是类的关联关系,这是二者的根本区别。

时间: 2024-08-28 22:03:07

适配器模式(java版)的相关文章

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

Java版贪吃蛇(比较完善的版本)

很认真的写的一个java版的贪吃蛇游戏,图形界面,支持菜单操作,键盘监听,可加速,减速,统计得分,设定运动速度,设定游戏背景颜色等!应该没有Bug了,因为全被我修改没了.哈哈. 下面是项目各包及类的层次关系: 游戏的主要运行界面截图如下: 下面是部分代码,详细源码见此链接:http://pan.baidu.com/s/1bnubnzh //Snake类: package com.huowolf.entities; import java.awt.Color; import java.awt.Gr

回溯算法解八皇后问题(java版)

八皇后问题是学习回溯算法时不得不提的一个问题,用回溯算法解决该问题逻辑比较简单. 下面用java版的回溯算法来解决八皇后问题. 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 思路是按行来规定皇后,第一行放第一个皇后,第二行放第二个,然后通过遍历所有列,来判断下一个皇后能否放在该列.直到所有皇后都放完,或者放哪

pureMVC java版搭建流程

转自:http://blog.csdn.net/sutaizi/article/details/6588004 pureMVC 是一个轻量级的框架 它在 flex中非常流行(和cairngorm差不多火) 目前几乎已经移植到所有平台上. 下面实现java版得pureMVC搭建 先给大家看总体的层次: 众所周知 pureMVC是一个轻量级的MVC框架 分为 Model ,View ,Controller.这三个是pureMVC的核心. 除此之外pureMVC中含有一个单例模式Facade.faca

AKKA文档(java版)

目前我正在翻译AKKA官网文档.翻译:吴京润 译者注:本人正在翻译AKKA官网文档,本篇是文档第一章,欢迎有兴趣的同学加入一起翻译.更多内容请读这里:https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/lists/ded96c34f7ce4a6bb8b5473f596e1008/show/https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/todos/640e53d

应用程序初次运行数据库配置小程序(Java版)

应用程序初始化数据库配置小程序 之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的时候自动部署数据库和导入一些初始化数据.然后就有了以下的思路: 在应用程序入口处判断数据库是否已经配置完成,若配置完成则进入正常的登录系统完成正常操作即可,若未配置则进入数据库配置的小程序完成数据库配置然后再进入系统,但如何来判断是否已经配置完成呢,在这里我用的是比较原始的方法,配置数据库的时候系统

微博地址url(id)与mid的相互转换 Java版

原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分(蓝色)为一串貌似随机的字符串. 如果通过方法能计算出蓝色字串与返回的数组里的对应关系则好解决多了. 首先分组蓝色字串 ,从后往前4个字符一组,得到以下三组字符:z8ElgBLeQ 将它们分别转换成62进制的数值则为 35, 2061702, 8999724  将它们组合起来就是一串 3520617

java版的QQ小程序

转载自:http://blog.csdn.net/lihongxun945/article/details/6114290 这是一个简单的java版的QQ小程序. 包括一个简单的服务器和一个简单的客户端. 运行时,先运行服务器,然后在运行客户端,就可以进行聊天了. 默认的配置是localhost,端口4545,更改ip就可以在两天电脑上进行聊天了. 目前不支持内网和外网之间的访问,也不支持多人聊天. 因为这只是一个简单的例子,感兴趣的同学可以通过改进,实现多人聊天和内外网之间的访问. 效果图:

青蛙的约会 java版

参考http://blog.csdn.net/polossk/article/details/9799735 package acm; public class FrogDate { public static void main(String[] args) { int x = 11,y = 21,m = 31,n = 41,l = 44; int ar=n-m,br=0,cr=x-y; int M = exGcd(n-m,l,ar,br); System.out.println("M:&qu