适配器模式(adapter pattern) 详细解释

本文地址: http://blog.csdn.net/caroline_wendy

适配器模式(adapter pattern): 将一个类的接口, 转换成客户期望的还有一个接口. 适配器让原本不兼容的类能够合作无间.

适配器模式(adapter pattern)主要包含:

1. 被适配者接口(adaptee interface): 须要被适配的接口.

2. 适配器(adapter): 转换的类;

3. 目标接口(target interface): 须要转换成为的接口.

4. 客户(client): 详细使用的类.

详细方法:

1. 被适配者(adaptee interface)接口, 和实现接口详细的类.

/**
* @time 2014年6月17日
*/
package adapter; /**
* @author C.L.Wang
*
*/
public interface Turkey {
public void gobble();
public void fly();
} /**
* @time 2014年6月17日
*/
package adapter; /**
* @author C.L.Wang
*
*/
public class WildTurkey implements Turkey { /* (non-Javadoc)
* @see adapter.Turkey#gobble()
*/
@Override
public void gobble() {
// TODO Auto-generated method stub
System.out.println("Gobble gobble! ");
} /* (non-Javadoc)
* @see adapter.Turkey#fly()
*/
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I'm flying a short distance! ");
} }

2. 目标接口(target interface), 和实现接口详细的类.

/**
* @time 2014年6月17日
*/
package adapter; /**
* @author C.L.Wang
*
*/
public interface Duck {
public void quack();
public void fly();
} /**
* @time 2014年6月17日
*/
package adapter; /**
* @author C.L.Wang
*
*/
public class MallardDuck implements Duck { /* (non-Javadoc)
* @see adapter.Duck#quack()
*/
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("Quack! ");
} /* (non-Javadoc)
* @see adapter.Duck#fly()
*/
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I'm flying! ");
} }

3. 适配器(adapter): 被适配者接口(adaptee interface) 转换 目标接口(target interface).

组合被适配者类接口, 实现目标类接口.

/**
* @time 2014年6月17日
*/
package adapter; /**
* @author C.L.Wang
*
*/
public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter (Turkey turkey) {
this.turkey = turkey;
} /* (non-Javadoc)
* @see adapter.Duck#quack()
*/
@Override
public void quack() {
// TODO Auto-generated method stub
turkey.gobble();
} /* (non-Javadoc)
* @see adapter.Duck#fly()
*/
@Override
public void fly() {
// TODO Auto-generated method stub
for (int i=0; i<5; ++i) { //多次飞行
turkey.fly();
}
} }

4. 客户(client)方法须要使用目标类,

把被适配者(adaptee)的详细类, 通过适配器(adapter), 转换为目标(target)类, 进行调用:

/**
* @time 2014年6月17日
*/
package adapter; /**
* @author C.L.Wang
*
*/
public class DuckTestDrive { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println("The Turkey says ...");
turkey.gobble();
turkey.fly(); System.out.println("\nThe Duck says ...");
testDuck(duck); System.out.println("\nThe TurkeyAdapter says ...");
testDuck(turkeyAdapter);
} static void testDuck (Duck duck) {
duck.quack();
duck.fly();
} }

5. 输出.

The Turkey says ...
Gobble gobble!
I'm flying a short distance! The Duck says ...
Quack!
I'm flying! The TurkeyAdapter says ...
Gobble gobble!
I'm flying a short distance!
I'm flying a short distance!
I'm flying a short distance!
I'm flying a short distance!
I'm flying a short distance!

设计模式 - 适配器模式(adapter pattern) 具体解释的更多相关文章

  1. 设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 具体解释

    适配器模式(adapter pattern) 枚举器和迭代器 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考适配器模式(adapter patter ...

  2. C#设计模式——适配器模式(Adapter Pattern)

    一.概述在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件. ...

  3. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...

  4. 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)

    怎样让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 标签: 设计模式初涉 概念相关 定义: 适配器模式把一个类的接口变换成client所期待的还有一种接口,从而 使原本因接 ...

  5. 设计模式系列之适配器模式(Adapter Pattern)——不兼容结构的协调

    模式概述 模式定义 模式结构图 模式伪代码 类适配器,双向适配器,缺省适配器 类适配器 双向适配器 缺省适配器 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 主要缺点 适 ...

  6. 二十四种设计模式:适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern) 介绍将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.示例有一个Message实体类 ...

  7. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  8. 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...

  9. 适配器模式(Adapter Pattern)--设计模式

    在生活中,想用苹果充电线给安卓的手机充电时,因为两者的接口不一样,会导致充电口无法进行匹配, 这时候,就需要适配器,将安卓的充电口转化为苹果的接口,这样就可以充电啦.已有的类与新的接口不兼容问题是很普 ...

随机推荐

  1. C++学习之函数指针

     C++学习之函数指针          和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...

  2. Oracle游标

    转自:http://www.cnblogs.com/fjfzhkb/archive/2007/09/12/891031.html 游标-----内存中的一块区域,存放的是select 的结果      ...

  3. perl正则表达式第三周笔记

    正则引擎的分类 正则引擎的分类 正则引擎的分类主要分两种: DFA:egrep.awk.lex.flex NFA:.NET.PHP.Perl.Ruby.Python.GNU Emacs.ed.sec. ...

  4. 安装CAD出现Error 1904.Module的解决方法

    在安装AutoCAD2008时,安装过程中出现了一个小错误,虽然说不影响使用,也不影响功能,但还是需要把这个问题解决,今天就和大家分享解决这个问题的方法. 错误描述 会在安装过程中出现错误提示:Err ...

  5. tree(简单并差集)

    tree  Accepts: 156  Submissions: 807  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536/65 ...

  6. Linux下smi/mdio总线驱动

    Linux下smi/mdio总线驱动 韩大卫@吉林师范大学 MII(媒体独立接口), 是IEEE802.3定义的以太网行业标准接口, smi是mii中的标准管理接口, 有两跟管脚, mdio 和mdc ...

  7. ListBox控件的操作与实现

    .NET FrameWork>參考>类库>System.Windows.Forms>ListBox类的属性 1. 属性列表:     SelectionMode     组件中 ...

  8. 理解Android的layout和measure

    在Android UI开发中,总会有情况需要自定义View和View Group. 什么是View?就是Android中一个基本视图单位,一个Button是一个view, 一个Layout, 也是一个 ...

  9. Object-c中@private、@protected、@public解析

    Objective-C中,类的实例化变量的范围有@private.@protected.@public.他们代表的意思和C++中相同,只是前面添加了一个@符号.下面介绍一下他们代表的范围: 指令 意思 ...

  10. jsp中的两种跳转方式分别是?有什么区别?

    在JSP中跳转有两种方式 forward跳转:<jsp:forward page ="跳转页面地址"> response跳转:response.sendRedirect ...