zoukankan      html  css  js  c++  java
  • 适配器模式

       适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。
       
     
    适配器模式的种类:类适配器、对象适配器、接口适配器
    前二者在实现上有些许区别,作用一样,第三个接口适配器差别较大。
     
    一、 类适配器模式:
       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();
            }
          }
  • 相关阅读:
    每天一个linux命令(57):ss命令
    [原][osg][osgearth]我眼中的osgearth
    [osg]osgDB的加载机制,使用3DS插件做参考(转,整理现有osgDB资料)
    [原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
    [原][译][osgearth]Model Source Drivers模型驱动源(OE官方文档翻译)
    [原][译][osgearth]样式表style中参数总结(OE官方文档翻译)
    [原][osgearth]API加载earth文件的解析
    [原][译][osgearth]API加载地球(OE官方文档翻译)
    [osgearth]Earth文件详解
    [osgearth]通过API创建一个earth模型
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/10955654.html
Copyright © 2011-2022 走看看