java设计模式之适配器模式

1.概念: 
适配器模式(Adapter Pattern把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 
2.
两种形式 
a.
的适配器模式 b.对象的适配器模式 
3.
模拟问题: 
   
现在假设我们的程序已经设计了接口run接口,但是现在有一个特殊的接口SpecificRun能更好的完成我们的功能,但是它和我们现有的run接口不匹配。那我们如何将它们一起工作呢?看下面的实例: 
3.
实例1a.的适配器模式

 

目标角色:

public interface Target {
 public void run();
}

源角色:

public class Adaptee {
  public void specificRun(){ 
         System.out.println("新加的功能"); 
  } 
}

适配器角色:

public class ClassAdapter extends Adaptee implements Target {

    @Override
     public void run() {
       this.specificRun();
     }

}

用户角色:

public class TestAdapter {

    public static void main(String[] args) {
          ClassAdapter classAdapter = new ClassAdapter();
          classAdapter.run();

    }

}

运行结果:

新加的功能 

 

3.实例2b.对象的适配器模式

     实例代码: 
目标角色,源角色代码不变

     适配器角色:

public class ObjectAdapter implements Target {

 private Adaptee adaptee;
 
 public ObjectAdapter(Adaptee adaptee){
  this.adaptee = adaptee;
 }
 @Override
 public void run() {
  // TODO Auto-generated method stub
  adaptee.specificRun();
 }

}

 

      用户角色:

public class TestAdapter {

      public static void main(String[] args) {

          Adaptee adaptee = new Adaptee();
             ObjectAdapter objectAdapter = new ObjectAdapter(adaptee);
             objectAdapter.run();
         }

}

 

运行结果:

 

新加的功能 

 

 

    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。  Adapter模式的宗旨就是,基于现有类所提供的服务,向客户端提供接口,以满足客户的期望。 

最直接理解就是:我们需要实现某个功能,而现在实现这个功能的组件不必我们自己开发,可以通过第三方的组件来实现, 但第三方组件的接口与现在所定义的接口不一致(即类名,方法名不一样),那么在不修改两方接口的情况下,可以通过采用适配器模式来解决这一问题。

      总结:根据客户端给出的组件是接口还是类,适配器通过实现接口或者继承类的方式来实现多态。 如果是实现接口,那么适配器则可以继承第三方组件,通过调用父类方法来完成功能。如果是继承,因为java中不支持多继承,适配器将具体操作委派给第三方 组件来完成。这是根据客户端给出的组件类型来区分。设计模式的原 则是:优先使用对象组合而不是类继承。这样适配器模式就很容易理解,就是客户端通过多态调用适配器,适配器通过使用第三方对象来完成具体功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值