- 浏览: 440119 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (162)
- easymock (3)
- 模板引擎 (3)
- JForum (4)
- web (9)
- spring (10)
- java (20)
- struts (9)
- uml (3)
- java pattern (19)
- JQuery (14)
- 多线程 (13)
- database (21)
- PS (3)
- ejb (6)
- 版本管理 svn , maven , ant (2)
- protocol (1)
- 测试 (1)
- ws (7)
- Apache (4)
- 脚本语言 (1)
- guice (1)
- 分布式 (4)
- 架构 (0)
- 经验 (1)
- 版本管理 svn (1)
- maven (1)
- ant (1)
- 书籍 (1)
- Linux (1)
最新评论
-
Master-Gao:
稍微明白了点,,有点萌萌哒
为什么匿名内部类参数必须为final类型 -
waw0931:
终于明白了,谢谢!
为什么匿名内部类参数必须为final类型 -
十三圆桌骑士:
提供了两个链接还是有用的。
安装Mondrian -
放方芳:
[flash=200,200][/flash]
Freemarker标签使用 -
放方芳:
[b][/b]
Freemarker标签使用
- Target - defines the domain-specific interface that Client uses.
- Adapter - adapts the interface Adaptee to the Target interface.
- Adaptee - defines an existing interface that needs adapting.
- Client - collaborates with objects conforming to the Target interface.
附中文版:
问题引出:大家生活中可能碰到的一个问题就是你新买的手机自带的耳机是2.5接口的,不幸的是有一天你的耳机坏了,你去市面上根本就找不到2.5的耳机了,基本上是3.5接口了,没办法你只好买了个3.5接口的耳机,老板告诉你:“我给你一个适配器”这不问题就解决了。
问题分析:3.5的接口的耳机在你手机上本来是没法使用的,因为它没有按照2.5接口的设计啊,而现在我又想使用这幅耳机,于是乎有了“适配器(Adapter)”这个一个东西出来了。
Adapter模式的定义:把一个类的接口变换成客户端所期待的另外一种接口,使得原本由于接口不兼容而不能再一起工作的那些类可以一起工作。
适配器模式分类:1.类的适配器模式(采用继承实现)2.对象适配器(采用对象组合方式实现)
类的适配器类图:
模式的构成:以问题中例子为模型
目标抽象角色(Target):定义客户所期待要使用的接口,我们把手机当做客户端,客户端所需要使用的耳机的接口是2.5的,在这里就可以抽象出来一个2.5接口的设备(并不一定是耳机)。
源角色(Adaptee):需要被适配的接口,在这里指的是我们从市场上买回来的那个3.5接口的耳机。
适配器角色(Adapter):用来把源接口转换成符合要求的目标接口的设备,在这里指的是老板送给我们的那个“转换器”。
客户端(Client):这里指的就是那个给我们带来麻烦的手机喽。
示例代码:
- //Target
- package pattern.adapter;
- public interface Target {
- public void provide2_5();
- }
- //Adaptee
- package pattern.adapter;
- public class Adaptee {
- public void provide3_5(){
- System.out.println("我是一个3.5的接口哦");
- }
- }
- //Adapter
- package pattern.adapter;
- public class Adapter extends Adaptee implements Target {
- @Override
- public void provide2_5() {
- this.provide3_5();
- }
- }
- //Client
- package pattern.adapter;
- public class CellPhoneClient {
- public static void main(String[] args) {
- Target target = new Adapter();
- //该手机只支持2.5接口的耳机
- target.provide2_5();
- }
- }
//Target package pattern.adapter; public interface Target { public void provide2_5(); } //Adaptee package pattern.adapter; public class Adaptee { public void provide3_5(){ System.out.println("我是一个3.5的接口哦"); } } //Adapter package pattern.adapter; public class Adapter extends Adaptee implements Target { @Override public void provide2_5() { this.provide3_5(); } } //Client package pattern.adapter; public class CellPhoneClient { public static void main(String[] args) { Target target = new Adapter(); //该手机只支持2.5接口的耳机 target.provide2_5(); } }
输出结果
:我是一个3.5的接口哦
从输出结果可以看出只支持2.5接口的手机成功的使用3.5的耳机了。这就是适配器模式的作用。
对象的适配器模式:
对象的适配器模式的不同之处在于Adapter角色封装了Adaptee角色,而不像类的适配器模式所采取的继承方式。其原理基本上是相似的。
应用适配器模式的场景:
1.系统需要使用现有的类,而现有类不符合当前系统的要求。如问题的提出。
2.系统要建立一个可以重复使用的类,用来与彼此没有太大关联的类或者在将来要引用的类一起工作。在Junit中有使用适配器模式的情景。
在TestCase的runBare方法中发现
该方法采用了两种模式,模板方法模式(不在本讨论范围)和适配器模式,其中runTest()方法其实 对应的就是我们用户(程序员)所编写的测试方法
在runTest方法中通过反射最终调用我们所编写的测试方法。我们可从宏观上来分析改代码,junit作为一个框架,他是没法知道我们要写些什么样的测试方法的,也是就是说他没法在runbare方法中直接调用我们所写的测试方法,他就采用适配器模式这样的一个方式来实现。Junit框架本身没法直接调用客户端所写的测试类,但他可以直接调用他本身拥有的类TestCase,这里的TestCase就相当于Adapter了,自己所写了测试类相当于Adaptee角色。
缺省的适配器模式(Default Adapter):缺省的适配器模式为一个接口提供缺省的实现,子类可以从这个缺省的实现类进行扩展,而不必而原有的接口进行扩展。相信大家在学习Swing时“AWT中事件的处理”有所接触。他的好处在于客户端不需要去实现与他无关的方法,只做他最关心的事。
发表评论
-
访问者模式 Visitor(转)
2012-06-25 14:49 1172一、引子 对于系统中一个已经完成的类层次结构,我们已 ... -
策略模式 Strategy
2012-06-21 10:30 989策略模式(Strategy):它定义了一系列的算法,并将每一个 ... -
模板方法模式 Template Method
2012-06-21 10:21 889GOF给模板方法(Template Method)模式定义一个 ... -
状态模式 State
2012-06-19 15:37 1022State模式的定义: 不同的 ... -
备忘录模式 Memento(转)
2012-06-19 14:11 0备忘录模式(Memento) 属于对象的行为模式。 ... -
中介者模式 Mediator (转)
2012-06-19 11:11 0一、中介者模式简介 ... -
迭代器模式 iterator
2012-06-18 14:58 3274一、 引言 迭代这个名词对于熟悉Java的人来说绝对不陌 ... -
解释器模式 interpreter(转)
2012-06-18 13:48 0Interpreter模式也叫解释器模式,是由GoF提出的23 ... -
责任链模式 chain of responsibility(原)
2012-06-15 15:56 1037动机: 在开发过程中有一种情况:一个事件产生一个请求,这个请 ... -
享元模式 flyweight
2012-06-14 15:45 909个人理解:当系统内部需要使用大量的细粒度对象时,内存中每种类型 ... -
外观模式 Facade
2012-06-13 16:02 937先做个总结: 外观模式就是提供一个高层接口来集成、制定、调用 ... -
组合模式(Composite)
2012-06-13 15:33 2197The figure below shows a UML cl ... -
Bridge桥接模式
2012-06-08 15:24 758Bridge桥接模式是一种结构型模式,它主要应对的是:由于类 ... -
代理模式
2012-06-08 11:06 779代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引 ... -
设计模式(Design Pattern)的原则
2012-06-08 11:00 836设计模式(Design Pattern)的原则 1、&q ... -
原型模式 Prototype Pattern
2012-03-30 18:34 1145一. 原型模式简介 ... -
设计模式之Decorator
2012-03-30 16:44 793设计模式之Decorator(油漆工) ... -
命令模式
2011-12-09 15:35 787优点: 解耦了发送者和接受者之间联系。 发送者调用一个 ... -
观察者模式
2011-12-09 10:50 941Define a one-to-many depend ... -
抽象工厂 理解
2011-10-14 18:22 982抽象工厂模式 抽象工厂模式(英语:Abstra ...
相关推荐
java 汽车适配器(Adapter适配器模式) java 汽车适配器(Adapter适配器模式)
主要介绍了PHP设计模式:适配器模式Adapter,结合实例形式详细分析了PHP适配器模式Adapter基本概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1032986
设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...
设计模式C++学习之适配器模式(Adapter)
适配器模式(Adapter) demo
基于类的Adapter模式的一般结构如下:Adaptee类为Adapter的父类,Adaptee类为适配源,适配目标(接口)也是Adapter的父类;基于类的Adapter模式比较适合应用于Adapter想修改Adaptee的部分方法的情况。 基于对象的...
一些书籍也称适配器模式为缺省适配器模式(Default Adapter Pattern) 。 适配器模式主要分 为三类: 类适配器模式、 对象适配器模式、 接口适配器模式。 以生活中手机充电为例来讲解适配器模式, 手机本身并不能...
设计模式之适配器模式(Adapter Pattern) 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式 设计模式 Adapter 还请各位大S指教
C#设计模式之适配器模式应用实例
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第7节:结构型模式Adapter 适配器模式
Head First 设计模式 (七) 适配器模式(Adapter pattern) C++实现
适配器模式是一种结构型设计模式,它允许接口不兼容的两个类可以协同工作。以下是该模式的要点: 1. **角色**: - **Target(目标接口)**:客户端期望调用的接口。 - **Adaptee(适配者)**:现有的、接口与目标...
介绍24设计模式中的Adapter模式,如果使用,实例讲解,等等
走进设计模式之——适配器模式 (Adapter) 对应代码
主要介绍了java设计模式之适配器模式Adapter的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java设计模式之适配器模式,希望对大家有所帮助。
NULL 博文链接:https://toyota2006.iteye.com/blog/553012