Java设计模式(7)——结构型模式之适配器模式(Adapter)
一、概述
概念

其实,举个生活中的例子的话,适配器模式可以类比转接头,比如typeC和USB的转接头,把原本只能接typeC的接口,拓展为可以接普通USB;这里的转接头一方面需要查在typeC上,一方面需要作为USB插口。
如果要举个Java中的例子的话,不妨看看JDBC的章节介绍!下图为JDBC简略UML图(中间的xxx JDBC就是我们适配JDBC与各大数据库厂商的适配器了!)

简略图

类的适配器模式


对象的适配器模式(注意看类的关系,上面是继承,下面是委派)


二、实践
上面提到的转接头的例子,我们参考:http://www.cnblogs.com/V1haoge/p/6479118.html
当然,此例和上述转接头的例子本质是一样的(只是根据功能把接口分开的写法),上例中实际调用的都是已有的接口,通过适配的形式来调用,我们实际使用时应当灵活运用!
类的适配,我们分别写出简略图中的角色即可
目标角色
/**
* 目标接口
* 作者: Administrator
* 日期: 2017/10/28
**/
public interface Target {
/**
* 目标操作1
*/
void operation1();
/**
* 目标操作2
*/
void operation2();
}
源角色
/**
* 源角色
* 作者: Administrator
* 日期: 2017/10/28
**/
public class Adaptee {
public void operation1(){
System.out.println("adaptee#opetion1()");
}
}
适配器
/**
* 适配器角色
* 作者: Administrator
* 日期: 2017/10/28
**/
public class Adapter extends Adaptee implements Target{
@Override
public void operation2() {
System.out.println("adapter#operation2()");
}
}
客户端使用
public class Client {
public static void main(String[] args) {
Target t = new Adapter();
t.operation2();
}
}
对象的适配器我们看核心的适配器角色
适配器
/**
* 适配器角色
* 作者: Administrator
* 日期: 2017/10/28
**/
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void operation1() {
adaptee.operation1();
} @Override
public void operation2() {
System.out.println("adapter#operation2()");
}
}
三、改进与思考
缺省的适配器模式
在JAVA中要实现一个接口,就要实现所有的抽象方法。但是有时候只想实现一部分方法,就可以使用一个抽象类来实现这个接口,然后提供“空实现”,这样我们只要继承这个类,重写需要的方法即可!
实际案例


Java设计模式(7)——结构型模式之适配器模式(Adapter)的更多相关文章
- Java设计模式之结构型模式
结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 一.适配器模式: 意图: 将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接 ...
- GoF23种设计模式之结构型模式之适配器模式
一.概述 将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 二.适用性 1.你想使用一个已经存在的类,但是它的接口不符合 ...
- 设计模式---结构型模式之适配器模式(Adapter Pattern)
适配器模式定义 将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以合作无间. 适配器模式主要有两种类型:对象适配器和类适配器. 在详细解释这两种类型时,解释部分重要角色.生活 ...
- Java经典23种设计模式之结构型模式(一)
结构型模式包含7种:适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式. 本文主要介绍适配器模式和桥接模式. 一.适配器模式(Adapter) 适配器模式事实上非常easy.就像手 ...
- Go语言实现的23种设计模式之结构型模式
摘要:本文主要聚焦在结构型模式(Structural Pattern)上,其主要思想是将多个对象组装成较大的结构,并同时保持结构的灵活和高效,从程序的结构上解决模块之间的耦合问题. 本文分享自华为云社 ...
- GoF的23种设计模式之结构型模式的特点和分类
结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足 ...
- GoF23种设计模式之结构型模式之组合模式
一.概述 将对象组合成树型结构以表示“部分--整体”的层次关系.组合模式使得用户对单个对象和组合对象的使用具有一致性. 二.适用性 1.你想表示对象的部分--整体层次结构的时候. 2.你希望用户忽略组 ...
- GoF23种设计模式之结构型模式之享元模式
一.概述 运用共享技术有效地支持大量细粒度的对象. 二.适用性 1.当一个应用程序使用了大量的对象的时候. 2.由于使用大量的独享而造成很大的存储开销的时候. 3.对象的大多数状态都可变为外部状态的 ...
- 设计模式(7)-结构型模式-Bridge模式
2.结构性模式 2.2 BRIDGE模式 别名:handle/body 这个模式体现了组合相对于继承的优势. 2.2.1动机 当一个抽象可能有多个实现时,通经常使用继承来协调它们.抽象类定义对该抽象 ...
随机推荐
- Oracle RAC和SCAN同时对外提供服务的配制方法
1, tnsnames.ora on two nodes:RACTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racsca ...
- selenium 滑动解锁(drag_and_drop_by_offset)
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from ...
- JavaScript中如何判断两变量是否“相等”?
1 为什么要判断? 可能有些同学看到这个标题就会产生疑惑,为什么我们要判断JavaScript中的两个变量是否相等,JavaScript不是已经提供了双等号“==”以及三等号“===”给我们使用了吗? ...
- grep参数说明及常用用法(转)
转:https://www.cnblogs.com/leo-li-3046/p/5690613.html grep常用参数说明 grep [OPTIONS] PATTERN [FILE...] gre ...
- JavaScript小游戏--翻牌记忆游戏
翻牌记忆游戏源码 1.有8张图片,每张图片要放两次,生成如下数组,长为16,[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7] 其中两两相同的代表两张相同的图片,0对应文件夹image ...
- TCP/IP模型 & 5层参考模型
OSl参考模型与TCP/IP参考模型相同点: 1.都分层 2.基于独立的协议栈的概念 3.可以实现异构网络互联
- Qgis里的查询过滤
查询过虑实现方式 通过给getFeatures()传递 QgsFeatureRequest对象,实现数据的过虑,下边是一个查询的例子: request = QgsFeatureRequest() re ...
- zabbix时间不同步
Linux下如何实现与Internet时间同步 一.安装ntp [root@server-2 ~]# yum install -y ntpdate 二.同步时间 // 方式一.使用域名连接,要经过DN ...
- C#实现双向链表
原文:http://www.cnblogs.com/skywang12345/p/3561803.html#a33 没有C#版本的..是不是很方..不过图和说明很好,引用一下 双向链表 双向链表(双链 ...
- 解决SVN UUID客户端和服务器不一致的问题
下面是从别的文章中COPY过来的两篇文章,可以完美的解决这个问题: 一. 重新定位SVN的时候,遇到uuid不一致的问题. Google得知可以使用以下命令 有到svnadmin命令:(位于 SVN安 ...