适配器模式

   适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。
   
 
适配器模式的种类:类适配器、对象适配器、接口适配器
前二者在实现上有些许区别,作用一样,第三个接口适配器差别较大。
 
一、 类适配器模式:
   1、原理:通过继承来实现适配器功能。
   2、实例讲解:
  我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。
  接口Ps2:描述ps2接口格式
  接口Usb:描述USB接口格式
  类Usber:是接口Usb的实现类,是具体的USB接口格式
  Adapter:用于将ps2接口格式转换成为USB接口格式
  
IPS2接口:
    public interface IPS2 {
         void isPs2();
      }
IUSB接口:
    public interface IUSB {
         void isUsb();
      }
USB接口实现类:
   public class Usber implements IUSB{
       @Override
        public void isUsb() {
           System.out.println("USB接口");
       }
     }
适配器:Adapter
   public class Adapter extends Usber implements IPS2 {
       @Override
       public void isPs2() {
          isUsb();
       }
     }
测试:
   public class AdapterTest {
      @Test
      public void test() {
         IPS2 ps2 = new Adapter();
         ps2.isPs2();
        }
      }
 
二、 对象适配器模式
    1、原理:通过组合来实现适配器功能。
    2、实例:
  
  适配器:Adapter
     public class Adapter implements IPS2 {
         private IUSB usb;
         public Adapter(IUSB usb) {
             this.usb = usb;
          }
        @Override
         public void isPs2() {
            usb.isUsb();
         }
       }
  测试:
    public class AdapterTest {
      @Test
        public void test() {      
            IPS2 ps2 = new Adapter(new Usber());
            ps2.isPs2();
        }
      }
 
三、 接口适配器模式
    1、原理:通过抽象类来实现适配,这种适配稍别于上面所述的适配。
     当存在这样一个接口,其中定义了N多的方法,而我们现在却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可。
   
 目标接口:A
     public interface A {
           void a();
           void b();
           void c();
           void d();
           void e();
           void f();
       }
 适配器:Adapter
      public abstract class Adapter implements A {
          public void a(){}
          public void b(){}
          public void c(){}
          public void d(){}
          public void e(){}
          public void f(){}
        }
 实现类:Ashili
      public class Ashili extends Adapter {
           public void a(){
              System.out.println("实现A方法被调用");
           }
           public void d(){
              System.out.println("实现d方法被调用");
          }
       }
  测试类:Clienter
    public class Clienter {
        public static void main(String[] args) {
           A a = new Ashili();
             a.a();
             a.d();
        }
      }
原文地址:https://www.cnblogs.com/lone5wolf/p/10955654.html