欢迎使用CSDN-markdown编辑器
2015-10-30 16:09
302 查看
转载于:/article/1603780.html
前言
适配器模式在设计模式体系中属于结构型模式,可以分为三类:类的适配器模式、对象的适配器模式和接口的适配器模式,由于类和接口的适配器模式需要适配器继承原有的类,而纯面向对象语言Java、C#都是不支持多继承的,这在一定程度上制约了类和接口的适配器模式的使用场景,故使用的时候要注意。
使用目的:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
类适配器模式
说明:
当新接口出现的时候,由于和老的接口不兼容,这个时候,我们采用一个适配器类实现新的接口并且继承老的业务类,这样就能同时处理新老业务。
示例代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
/**
* 原始类
*/
class Source {
public void oldFunction() {
System.out.println(“oldFunction:Source”);
}
}
interface Target {
void oldFunction();
}
// 适配器,用来做接口转换
class Adapter extends Source implements Target {
}
public class A {
public static void main(String args[]) {
Target target = new Adapter();
target.oldFunction();
target.newFunction();
}
}
输出:
oldFunction:Source
newFunction:Adapter
对象适配器模式
说明:当新接口出现的时候,由于和老的接口不兼容,这个时候,我们采用一个适配器类实现新的接口并在内部持有一个老业务逻辑的对象,这样就能把对老接口的调用全部中转给老的业务逻辑,从而解决接口的兼容性问题
示例代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
/**
* 原始类
*/
class Source {
public void oldFunction() {
System.out.println(“oldFunction:Source”);
}
}
interface Target {
void oldFunction();
}
// 适配器,用来做接口转换
class Adapter implements Target {
}
public class A {
public static void main(String args[]) {
Source source = new Source();
Target target = new Adapter(source);
target.oldFunction();
target.newFunction();
}
}
输出:
oldFunction:Source
newFunction:Adapter
接口适配器模式
说明:也叫缺省适配器模式,主要解决接口的复用问题:有时候可能我们的业务只需要使用接口中的某一个方法而不是全部方法,但是由于接口的语言特性而不得不实现全部的抽象方法,这样就会使得接口的使用过程很麻烦,特别是接口中存在很多抽象方法的时候。面对接口的这类问题,我们可以采用一个抽象类(也可以不是抽象类)去实现接口,然后让我们的类去继承这个抽象类同时只重写我们感兴趣的方法即可。
示例代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
interface Target {
void function1();
}
//TargetWrapper实现了Target接口,并给出了默认实现
abstract class TargetWrapper implements Target {
@Override
public void function1() {
System.out.println(“function1:TargetWrapper”);
}
}
// 适配器,继承TargetWrapper,重写自己感兴趣的方法
class Adapter extends TargetWrapper {
}
public class A {
public static void main(String args[]) {
Target target = new Adapter();
target.function1();
target.function2();
}
}
输出:
function1:TargetWrapper
function4:Adapter
版权声明:本文为博主原创文章,未经博主允许不得转载。
前言
适配器模式在设计模式体系中属于结构型模式,可以分为三类:类的适配器模式、对象的适配器模式和接口的适配器模式,由于类和接口的适配器模式需要适配器继承原有的类,而纯面向对象语言Java、C#都是不支持多继承的,这在一定程度上制约了类和接口的适配器模式的使用场景,故使用的时候要注意。
使用目的:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
类适配器模式
说明:
当新接口出现的时候,由于和老的接口不兼容,这个时候,我们采用一个适配器类实现新的接口并且继承老的业务类,这样就能同时处理新老业务。
示例代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
/**
* 原始类
*/
class Source {
public void oldFunction() {
System.out.println(“oldFunction:Source”);
}
}
interface Target {
void oldFunction();
// 新接口 void newFunction();
}
// 适配器,用来做接口转换
class Adapter extends Source implements Target {
public Adapter() { super(); } @Override public void newFunction() { System.out.println("newFunction:Adapter"); }
}
public class A {
public static void main(String args[]) {
Target target = new Adapter();
target.oldFunction();
target.newFunction();
}
}
输出:
oldFunction:Source
newFunction:Adapter
对象适配器模式
说明:当新接口出现的时候,由于和老的接口不兼容,这个时候,我们采用一个适配器类实现新的接口并在内部持有一个老业务逻辑的对象,这样就能把对老接口的调用全部中转给老的业务逻辑,从而解决接口的兼容性问题
示例代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
/**
* 原始类
*/
class Source {
public void oldFunction() {
System.out.println(“oldFunction:Source”);
}
}
interface Target {
void oldFunction();
// 新接口 void newFunction();
}
// 适配器,用来做接口转换
class Adapter implements Target {
// 适配器内部持有的原始类对象 private Source mSource; public Adapter(Source source) { mSource = source; } @Override public void oldFunction() { // 这里调用原始类中的方法 mSource.oldFunction(); } @Override public void newFunction() { System.out.println("newFunction:Adapter"); }
}
public class A {
public static void main(String args[]) {
Source source = new Source();
Target target = new Adapter(source);
target.oldFunction();
target.newFunction();
}
}
输出:
oldFunction:Source
newFunction:Adapter
接口适配器模式
说明:也叫缺省适配器模式,主要解决接口的复用问题:有时候可能我们的业务只需要使用接口中的某一个方法而不是全部方法,但是由于接口的语言特性而不得不实现全部的抽象方法,这样就会使得接口的使用过程很麻烦,特别是接口中存在很多抽象方法的时候。面对接口的这类问题,我们可以采用一个抽象类(也可以不是抽象类)去实现接口,然后让我们的类去继承这个抽象类同时只重写我们感兴趣的方法即可。
示例代码:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
interface Target {
void function1();
void function2(); void function3(); void function4();
}
//TargetWrapper实现了Target接口,并给出了默认实现
abstract class TargetWrapper implements Target {
@Override
public void function1() {
System.out.println(“function1:TargetWrapper”);
}
@Override public void function2() { } @Override public void function3() { } @Override public void function4() { }
}
// 适配器,继承TargetWrapper,重写自己感兴趣的方法
class Adapter extends TargetWrapper {
public Adapter() { super(); } @Override public void function2() { System.out.println("function4:Adapter"); }
}
public class A {
public static void main(String args[]) {
Target target = new Adapter();
target.function1();
target.function2();
}
}
输出:
function1:TargetWrapper
function4:Adapter
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 【C语言学习】《C Primer Plus》第13章 文件输入/输出
- 事件分发机制
- Spring 和 MyBatis 环境整合
- apk反编译
- Address already in use - bind(二) (Errno:EADDRINUSE)
- 简单词法分析器的实现
- JS对于Android和IOS平台的点击响应的适配
- android笔记之receiver——广播
- jQuery基础特点
- [置顶] 【android】音乐播放器之数据存储总结
- 次小生成树
- NSPredicate 过滤器
- JAVA 创建TXT文件,写入文件内容,读取文件内容
- 数据库操作(使用FMDB)
- Tomcat源码分析(四)------ Request和Response处理的全过程
- iOS- ViewController详解
- nginx ssl 部分加密
- [置顶] 【android】音乐播放器之service服务设计
- 【SSH项目实战】国税协同平台-12.角色权限管理2
- Android Design Support Library