Adapter模式与Facade模式的比较

Adapter是需要满足一个已经存在于新系统设计中的接口。而Facade不必遵守这一点。Adapter提供的接口可以是 既存系统暴露的接口的子集,当然,也可以是超集。而Facade提供的接口,一定是既存系统的一个子集。换句话说,Adapter模式提供的接口上的功能,可能是既存系统中不存在的,而Facade模式提供的接口上的功能,一定是既存系统中存在的。

下面是一个Adapter模式的范例代码private class Circle: Shape{  // .....  private XXCircle pxc; // 被适配的类  // .....  public Circle()  {  pxc = new XXCircle();  //....  }  public void Display()  {  pxc.displayIt();  }}

dapter模式和Facade模式都是包装,用对象将遗留系统包装起来使其更容易使用。 但是他们是不同类型的包装: [list=A] 在Facade模式中,我们不需要按照某个接口设计,而adapter模式中则相反。 Facade模式的动机是简化接口,而在Adapter模式中,尽管也是越简单越好,但是设计必须遵循一个已有的接口,不能再简化任何东西。[/list] 有些人认为两个设计模式的另一个差异是:Facade隐藏了多了类,而Adapter只隐藏了一个类。这种说法经常是成立的,但不是模式本身的特点,将Facade置于一个非常复杂的对象之前,而将adapter来包装几个共同实现所需功能的小对象,也是不可能的。 结论:Facade模式简化了接口,而Adapter模式则将一个已有的接口转换成一个已有的接口。 从动机出发,或许会更清晰一些 adapter是为了重用与期望接口不一致但的确可以被重用的代码。 简单打个比方比如一个客户端程序需要调用login方法执行登录认证,但其实已经有一个try_login接口被实现(adaptee)来执行这个过程,那么我就可以在login的实现中通过调用try_login的实现来重用代码。这个login的实现所属类就是一个adapter. 至于Facade模式,是为了减小模块间的耦合而在更高层次上定义的接口,通常提供以该模块较粗粒度的入口
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值