JiveJdon Community Forums
在线282人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 6 回复 / 1
 发表新帖子   回复该主题贴
hitdemo2002

悄悄话
发表文章: 15
注册时间: 2002年11月04日 10:41
我也想问个adapter的问题? 2003年03月24日 20:28 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表
当需要既打方形桩,又打圆形桩时
用如下实现:
-------------------------------------------------------------
public class SquarePeg{
  public void insert(String str){
    System.out.println("SquarePeg insert():"+str);
  }

}
-------------------------------------------------------------
public class RoundPeg{
  public void insertIntohole(String msg){
    System.out.println("RoundPeg insertIntoHole():"+msg);
}
}
-------------------------------------------------------------
public class PegAdapter extends SquarePeg{

  private RoundPeg roundPeg;

  public PegAdapter(RoundPeg peg)(this.roundPeg=peg;)

  public void insert(String str){ roundPeg.insertIntoHole(str);}

}
可是PegAdapter重载了SquarePeg的insert方法,只是在这个方法里生成了
圆桩,并没有生成方桩阿?为什么说需要既打方形桩,又打圆形桩呢?
manbaum

悄悄话
发表文章: 36
注册时间: 2003年03月21日 16:49
Re: 我也想问个adapter的问题? 2003年03月25日 09:18 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
首先你得明白需要 Adapter 的原因。

假设你需要打桩,又打 RoundPeg 又打 SquarePeg。你可以这样设计:

public interface IPeg
{
void Insert(String messsage);
}

public class RoundPeg implements IPeg
{
public void Insert(String message)
{
//...
}
}

public class SquarePeg implements IPeg
{
public void Insert(String message)
{
//...
}
}

这样你需要打桩时,只需要定义类似下面的方法:

public class BlahBlah
{
public void DoIt(IPeg thePeg)
{
// ... doing something to get message ...
thePeg.Insert(message);
}

}

如果情况如上所述,就不需要 Adapter 出现了。但是,问题出现了,如果别人已经完整实现了打圆形桩的方法,但是没有实现 IPeg 接口,你怎么办?这时候就需要 Adapter. 如下所示:

已有实现:

public class RoundPeg
{
public void InsertIntoHole(String message)
{
//...
}
}

你需要做一个 Adapter

public class RoundPegAdapter implements IPeg
{
private RoundPeg _roundPeg;

// 构造
public RoundPegAdapter(RoundPeg roundPeg)
{
_roundPeg = roundPeg;
}

// 实现接口
public void Insert(String message)
{
_roundPeg.Insert(message);
}
}

Ok, that's all.
manbaum

悄悄话
发表文章: 36
注册时间: 2003年03月21日 16:49
Re: 我也想问个adapter的问题? 2003年03月25日 09:20 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
Sorry, 有个错误。改正一下:


// 实现接口
public void Insert(String message)
{
_roundPeg.Insert(message);
}


应该改为:



// 实现接口
public void Insert(String message)
{
_roundPeg.InsertIntoHole(message);
}

hitdemo2002

悄悄话
发表文章: 15
注册时间: 2002年11月04日 10:41
Re: 我也想问个adapter的问题? 2003年04月02日 21:38 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
那比如这样
现有两个DAO:ADAO和BDAO,
public class ADAO {

public ADAO(String s){
......
}
public int insert(String ss){
......
}
}

public class BDAO{

public int delete(){

}
}

我现在定义了一个CDAO
public CDAO extends BDAO {
ADAO aDAO;

public CDAO(ADAO aDAO){
this.aDAO =aDAO;
}

public int insert(String ss){
int sss = aDAO.insert(ss);
return sss;

}
然后我在别的类中可以用CDAO的insert和delete方法,这样做算不算是用了adapter模式呢


}

manbaum

悄悄话
发表文章: 36
注册时间: 2003年03月21日 16:49
Re: 我也想问个adapter的问题? 2003年04月07日 13:20 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
>>然后我在别的类中可以用CDAO的insert和delete方法,这样做算不算是用了adapter模式呢

我觉得不算。关于 Adapter 这么说是不是清楚一点。

假设,你买了新房子,现在的任务是要装修。装修其中的一个内容是对屋内的电线重新布置,安置插座。现在出现问题了,为了匹配各种各样的插头,你是不是要在同一个部位,装上很多不同插孔形状的插座呢?当然你不会干,那多难看呀,而且多余!解决的办法就是装最常用的插孔的插座,其他的怪插头,由接线板来解决。这时候的接线板就是 Adapter;而各种不同形状的插头就是别人已经实现好的class,你无法修改它们;而你安装的那种插座类型,就是Adapter使用的Interface。
张二狠

悄悄话
发表文章: 10
注册时间: 2003年04月10日 12:50
Re: 我也想问个adapter的问题? 2003年04月10日 16:31 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
似乎
把一个实现了的类当
内部对象来使用,重新包装,就是adapter.
对吗
张二狠

悄悄话
发表文章: 10
注册时间: 2003年04月10日 12:50
Re: 我也想问个adapter的问题? 2003年04月10日 16:36 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
似乎
把一个实现了的类当
内部对象来使用,重新包装,就是adapter.

引用
实现Adapter方式,其实"think in Java"的"类再生"一节中已经提到,有两种方式:组合(composition)和继承(inheritance).
这个主题有 6 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam