ITPub博客

首页 > IT职业 > IT生活 > 我工作的那点事--学习《设计模式》实例应用(Adapter模式)

我工作的那点事--学习《设计模式》实例应用(Adapter模式)

原创 IT生活 作者:biqing0427 时间:2007-11-28 17:09:51 0 删除 编辑
一想到这个模式,我就想到一个谚语“挂羊头卖狗肉”,哈哈,虽然比较难听,感觉还是比较准确的表达这个意思的。[@more@]Adapter模式:Adaptee(被适配者),Adaptor(适配器)和Adapter(组装前两者).

当需要将两者结合,但是又不能改变这两者时,要用到这种模式。

还是用刚才的那个谚语作解释吧,比较形象点:

羊头:Adaptee
狗肉:Adaptor
卖者:Adapter

呵呵,下面的例子相关信息和这个谚语没有必然的联系。

其实很多时候,原来的信息在传播过程中被适配了,当你得到信息时,还以为是原来的信息。


下面还是用工作上的一些事情做实例解析下吧:

有些公司老总在国外,一些事情是由这边的manager代理的(好像是proxy模式,呵呵),有时候我们得到的信息都是他传达过来的,
他的一些处理方式,我们会都认为是老总的处理方式。


1.Adaptee:CEO

pubilc class CEO{
public String sendMessage(String message){
return "CEO:"+message;
}
}

2.Adaptor: Manager

pubilc class Manager{
public String sendMessage(String message){
return "Manager:"+message;
}
}

3.Adapter:Adapter 这里就进行改变了

pubilc class Adapter extends CEO {

private Manager manager;

public void setManager(Manager manager){
this.manager = manager ;
}

public String sendMessage(String message){
return manager.sendMessage(message);//好像是CEO的指令 其实已经变成了manager的指令了。
}
}

4.调用如下过程:

Manager manager = new Manager();
Adapter adaper = new Adapter();
adaper.setManager(manager);
adaper.sendMessage("message from ceo");

原理基本上解析清楚了,下面描述一下另外一种方法。

1.Adaptee:CEO

pubilc interface ICEO{
public String sendMessage(String message);
}

public class CEO implements ICEO{

public String sendMessage(String message){
return "CEO:"+message;
}
}

2.Adaptor: Manager

pubilc interface IManager{
public String sendMessage(String message);
}

pubilc class Manager implements IManager{
public String sendMessage(String message){
return "Manager:"+message;
}
}

3.Adapter:Adapter

pubilc class Adapter implements CEO,Manager {

private Manager manager;
private CEO ceo;

public void setManager(Manager manager){
this.manager = manager ;
}

public void setCEO(CEO ceo){
this.ceo = ceo ;
}

public String sendMessage(String message){
return manager.sendMessage(message);
}
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9879276/viewspace-985730/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    24
  • 访问量
    11660