文档章节

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时很方便。




© 著作权归作者所有

共有 人打赏支持
莫问viva
粉丝 37
博文 134
码字总数 114035
作品 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
《每日一剂》适配器刷新报错adapter.notifyDataSetChanged()解决

在使用ListView过程中,有时会出现The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a ......

王先森oO
05/29
0
0
项目需求讨论-Vlayout来快速构建及扩展复杂界面

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

青蛙要fly
2017/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
12分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
13分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
15分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
53分钟前
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部