设计模式(Design Patterns)笔记之二:Adapter

转载 2004年06月27日 20:02:00
http://dev.csdn.net/develop/article/14/14415.shtm

<?XML:NAMESPACE PREFIX = O />

前言:呵呵,从这起开始,我们换种记录方法怎么样?学学人家的,寓教于乐。第一次尝试,见笑了。^_^

定义:Adapter:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能

一起工作的那些类可以一起工作。

角色设定:
Helen,初次接触设计模式的美女程序员(没有BF)。
AndyTao,高手,战斗力达到N级,对设计模式有相当程度的了解。

问题的提出:
Helen埋首在公司自己的小空间里写着代码,(旁白:她虽然是个美女,但是写代码的水平还是不错的。)有点问

题正在埋头苦想,这时,AndyTao从旁边冒出来,“嗨,美女,到点了,一起吃饭吧?”“不行,我正烦着呢

!”Helen皱着眉头说。“哇,谁,谁欺负咱们Helen???”“切,谁敢欺负我啊。”“那怎么了?”AndyTao一

副义愤填膺的样子(这小子,司马昭之心)。
“没有啦,我这里程序不好处理。”“噢,我看看!”AndyTao不知什么时候已经在Helen的身后了。
屏幕上一段代码:
public class DrawCircle {
public void DrawCircle() {
……
}
   public void insert(String msg){
     System.out.println("DrawCircle insert():"+msg);
}
……
}
public class DrawAngle {
public void DrawAngle() {
……
}
   public void insert(String msg){
     System.out.println("DrawAngle insert():"+msg);
}
……
}
“我现在要在DrawCircle中调用DrawAngle的方法,可是类的已经分发出去了,不能修改,我该怎么办?”
看着美女皱眉头的样子,AndyTao一阵心痛,“这样啊,我给你提示,再写个Adapter类吧。”“什么是Adapter?


“呵呵,在实际编码过程中,由于某种需要,我们经常要将两个毫无关系的类交互。于是我们需要进行某种修正

,修改各个类的接口,这通常不符合编码要求,而且,如果没有源代码,我们又该怎么办?于是,我们就要用到

Adapter了,也就是适配器的意思。象你上面的程序,我们不能修改类接口,于是,我们再写一个Adapter类。”

public class DrawAdapter extends DrawCircle {

private DrawAngle drawangle;
public DrawAdapter(DrawAngle angle) {
this.drawangle=angle;
}
public void insert(String msg) {
drawangle.insert(str);
}
……
}

“在上面代码中,DrawAngle属于Adaptee,是被适配者。DrawAdapter是Adapter,将Adaptee(被适配者DrawAngle)

和Target(目标DrawCircle)进行适配。实际上这是将组合方法(composition)和继承(inheritance)方法综合运用

的一个例子。这样,你就无需对原来的类修改,甚至无需要知道其内部结构和源代码。”

“上面我们说的是对象适配器(Object Adapter),它允许client和Adaptee完全无关,只有适配器知道它们两者的

存在。另外,还有一种是类适配器(Class Adapter),它使用多重继承来实现。象对象适配器(Object Adapter)中

,就是上个例子,DrawAdapter继承了DrawCircle,但是,DrawAdapter同样可以继承DrawAngle。由于Java不支持

多重继承,这就是说,我们的某个类必须定义为接口(interface)。我们可以把DrawAngle定义为接口IDrawAngle

,这样代码如下。”

public interface IDrawAngle {
   public void insert(String msg);
……
}

public class DrawAngle implements IDrawAngle {
public void DrawAngle() {
……
}
   public void insert(String msg){
     System.out.println("DrawAngle insert():"+msg);
}
……
}

public class DrawAdapter extends DrawCircle implements IDrawAngle {

private DrawAngle drawangle;
public DrawAdapter(DrawAngle angle) {
this.drawangle=angle;
}
public void insert(String msg) {
drawangle.insert(str);
}
……
}

“看到了么,这样我们就实现了类适配器(Adapter)模式。不过,类适配器(Adapter)有一个问题,如果我们的

Target和Adaptee有一个相同名字的方法,Adapter不能保证这两个方法具有相同的含义或者行为,这是非常危险

的。所以要注意这种情况!”

“哦,我知道了,Adapter模式的用处就在于使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。从

而解决我现在的问题。”
“美女不笨嘛。这顿你请,以后我请,嘿嘿……”
“想追我?这顿我请,以后嘛,呵呵,再说吧。谢谢,走吧。”“OK!”

欲知后事如何,请待下回。^_^

--------------------------------------------------------------------
Yakuu

java设计模式大全 Design pattern samples in Java(最经典最全的资料)

Design pattern samples in Java.Build status:IntroductionDesign patterns are formalized best practice...
  • changemyself
  • changemyself
  • 2015年06月19日 13:10
  • 9751

设计模式(Design Patterns)

设计模式(Design Patterns)                                   ——可复用面向对象软件的基础 设计模式(Design pattern)是一套...
  • linlzk
  • linlzk
  • 2014年09月02日 11:09
  • 1992

Java设计模式之适配器模式(Adapter Pattern)

Adapter Pattern的作用是在不改变功能的前提下转换接口。Adapter分为两类,一类是Object Adapter, 另一类是Class Adapter。由于Class Adapter的实...
  • tracker_w
  • tracker_w
  • 2014年06月17日 03:39
  • 2394

设计模式(Design Patterns)-可复用面向对象软件的基础 06:适配器模式(Adapter)

一、写在前面的话 之前的几篇文章分析了5种创建型模式,从设计模式(Design Patterns)-可复用面向对象软件的基础 06这篇文章开始,继续介绍7种结构型模式:适配器模式、装饰模式、代理模式、...
  • Dove_Knowledge
  • Dove_Knowledge
  • 2017年05月25日 16:19
  • 508

Java基础学习总结(37)——Java23中设计模式(Design Patterns)详解

设计模式(Design Patterns)                                   ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使...
  • u012562943
  • u012562943
  • 2015年12月19日 13:19
  • 1788

设计模式(Design Patterns)

转载此http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html/ 设计模式(Design pattern)是一套被反复使用...
  • qq_15950325
  • qq_15950325
  • 2016年10月08日 07:08
  • 2129

设计模式(Design Patterns)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于...
  • houbin0912
  • houbin0912
  • 2016年10月08日 16:34
  • 309

Design Patterns: Singleton Basics 设计模式游戏中运用:单例基础

Design Patterns are among the bread and butter of the good developer's cookbook. Basically, any seri...
  • Finans
  • Finans
  • 2013年05月24日 14:23
  • 1198

设计模式(Design Patterns)

原文链接:http://blog.csdn.net/zhangerqing 资源:http://download.csdn.net/detail/zhangerqing/4835830 设计模式...
  • cuijhon
  • cuijhon
  • 2016年05月13日 17:45
  • 553

JAVA设计模式(一)(Design Patterns)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于...
  • qq_29663071
  • qq_29663071
  • 2016年08月02日 15:41
  • 251
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式(Design Patterns)笔记之二:Adapter
举报原因:
原因补充:

(最多只允许输入30个字)