Adapter Pattern 适配器模式

适配器模式将某个类的接口转化成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容问题,约摸有一种亡羊补牢的感觉。主要分三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

一、类的适配器模式

1、创建原始类

public class Source {
   public void method1(){
       System.out.println("Source的method1方法");
   }
}

2、创建接口,目的就是为了兼容原始类

public interface Target{
    public void method1();
    punlic void method2();
}

3、实现接口

public class Adapter extends Source implements Target{
    @Override
    public void method2(){
        System.out.println("Adapter的method2的方法");
    }
}

4、编写测试类,查看详情

public class Test{
    public static void main(String[] args){
        Target target = new Adapter();
        target.method1();
        target.method2();
    }
}

5、运行后打印结果

Source的method1方法
Adapter的method2方法

由此可以看出,Target接口的实现类 Adapter 具有了 Source 类的功能,可以说Adapter对Source做了适配。

二、对象的适配器模式

基本思路和类的适配器模式相同,只是将Adapter类做修改,此次不再继承Source类,而是持有Source类的实例,以达到兼容性的问题。

1、以上步骤省略,直接从创建Target实现类开始

public class Adapter implements Target {
   private Source source;
 
   public Adapter(Source source) {
       this.source = source;
   }
   @Override
   public void method1() {
      source.method1();
   }
   @Override
   public void method2() {
       System.out.println("Adapter的method方法");
   }
}

2、测试类如下

public class Test {
   public static void main(String[] args){
       Source source=new Source();
       Target target=new Adapter(source);
       target.method1();
       target.method2();
   }
}

3、结果如下

Source的method1方法
Adapter的method2方法

三、接口的适配器模式

有时,我们一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显是比较浪费的。因为并不是所有的方法都是我们需要的,有时可能只需要一两个。为了解决这个问题,我们引入接口的适配器模式,借助一个抽象类,该抽象类实现了该接口的所有的方法,而不和我们原始的接口打交道,只和抽象类之间有联系。所有我们需要一个类,继承该抽象类,重写我们需要的方法就可以了。

1、创建抽象类 Wraaper 来实现 Target 接口

public abstract class Wraaper implements Target{
    @OVerride
    public void method1(){
    }
    @Override
    public void method2(){
    }
}

2、创建继承类

public class S1 extends Wraaper{
    @Override
    public void method1(){
        System.out.println("S1 的 method1");
    }
}


public class S2 extends Wraaper{
    @Override
    public void method2(){
        System.out.println("S2 的 method2");
    }
}

3、创建测试类

public class Test {
   public static void main(String[] args){
       S1 ss=new S1();
       S2 sm=new S2();
       ss.method1();
       ss.method2();
       sm.method1();
       sm.method2();
   }
}

适配器模式相对来说比较简单,当项目升级时用到的可能性还是比较大的,故在此一记。。。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值