文档章节

Adapter

莫问viva
 莫问viva
发布于 2014/03/08 10:45
字数 523
阅读 61
收藏 0


三要素:

1,客户提供接口

2,现有的类

3,适配器


举例说明:

1,客户提供的接口

public interface ICalculate {

public int getResult(int x , int y);

}


2, 现有类

public class AddCalculate {

public int add(int x, int y){
return x+y;
}

}


3适配器的设计模式实现可分为两类:

(1), 类适配器:继承现有的类,并且实现客户提供的接口

public class Adapter extends AddCalculate implements ICalculate{
public int getResult(int x, int y) {
  return add(x, y);
}
}

(2),对象适配器:

public class Adapter implements ICalculate{

private AddCalculate add ;

public Adapter(AddCalculate add){
this.add = add;
}

public int getResult(int x, int y) {
return add.add(x, y);
}

}


4,测试

public class Main {

public static void main(String args[]){
//class way
ICalculate calculate = new classWay.Adapter();
System.out.println(calculate.getResult(10, 20));

//object way
ICalculate calculate2 = new objectWay.Adapter(new AddCalculate());
System.out.println(calculate2.getResult(10, 20));
}

}

5、类模式/对象模式分析:
由于存在两种Adapter实现方式,那么在实际中我们采用哪一种要好呢?通过分析发现这两种模式有两个主要特性区别,并且还是互补的:
 
A、表现在Adapter对Adaptee的特殊性要求:
类模式由于Adapter是Adaptee的子类,所以Adapter很方便重新定义Adaptee中的个别方法,以达到自己的特性需要。
对象模式由于Adapter不是Adaptee的子类,所以如果Adapter对Adaptee中的个别方法有特殊的需要,就要新建Adaptee的子类,而让Adapter使用这个子类。
 
B、表现在Adaptee的类层次扩展上:
类模式由于Adapter是Adaptee的子类,所以编译后就不能再更换所实现的父类Adaptee,因此如果有一个Adaptee的类层次结构,就要相应的有一个Adapter的类层次结构,且新扩展Adaptee时很不方便。
对象模式由于Adapter不是Adaptee的子类,而是通过使用的方式,所以在系统运行时仍然可以更换Adapter所使用的Adaptee,只要他们具有相同的类型。所以在新扩展Adaptee时很方便。




© 著作权归作者所有

共有 人打赏支持
上一篇: Proxy
莫问viva
粉丝 38
博文 135
码字总数 114910
作品 0
长沙
高级程序员
私信 提问
适配器模式开发

Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接 口形式。 在大规模的系统开发过程中,我们常常碰到诸如以下这些情况:我们需要实现某些功能,...

泡海椒
2015/10/25
105
0
杨慧强/android-adapter

android-adapter android极简adapter,支持list-adapter、expandable-list-adapter以及recycler-adapter,可以非常方便的创建单type以及多type的adapter。 gradle配置方式: 使用方式: 1、创...

杨慧强
2016/10/10
0
0
一vmware ubuntu14.04-安装OpenStack-Basic Environment

1在vmware他建三台虚拟机分别命名为controller,compute,network, 每台虚拟机安装ubuntu14.04 server系统 创建虚拟机时为controller节点添加两个网卡,分别为: Adapter 1: Attached to: Ho...

JennerLuo
2016/03/28
64
0
项目需求讨论-Vlayout来快速构建及扩展复杂界面

大家好,今天又带来了项目中具体遇到的需求。做一个首界面,该首界面有很多功能块,同时这些功能块是动态的,因为登录的人的权限的不同,会显示不同的功能块,因为功能模块的数量不一定,所以...

青蛙要fly
2017/05/27
0
0
zzhoujay/AdvanceAdapter

AdvanceAdapter 可以添加Header和Footer的适配与RecyclerView的Adapter 可以添加多个Header和多个Footer 采用的是包裹原本的Adapter的方式,无需修改原本Adapter 同步子Adapter的数据改变事件...

zzhoujay
2015/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Chrome浏览器中启动deviceready事件(尝试调试phonegap项目)?

我正在开发PhoneGap应用程序,我希望能够在Chrome中调试它,而不是在电话上调试。但是,我在onGetReady()函数中初始化我的代码,该函数在PhoneGap触发“deviceready”事件时触发。由于Chr...

kisshua
40分钟前
6
0
支付宝客户端架构分析:自动化日志收集及分析

摘要: 《支付宝客户端架构解析》系列将从支付宝客户端的架构设计方案入手,带领大家进一步了解支付宝在客户端架构上的迭代与优化历程。 小蚂蚁说: 《支付宝客户端架构解析》系列将从支付宝...

阿里云官方博客
43分钟前
1
0
nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
今天
11
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
今天
6
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部