• 设计模式 适配器模式(Adapter)


    适配器模式的作用是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。做法是将类自己的接口包裹在一个已存在的类中。这种类型的设计模式属于结构型设计模式

    UML角色:

    Source:需要被适配的类、接口、对象,即Datas。 
    Destination:需要得到的类,Source通过适配得到的类对象,也就是我们期待得到的借口。 
    Adapter:适配器类,协调Source和Destination,使两者能够协同工作。

    实现方式:

    类的适配器模式(采用继承实现)
    对象适配器(采用对象组合方式实现)
    接口的适配器模式

    应用场景:

    系统需要使用现有的类,但现有的类却不兼容。
    需要建立一个可以重复使用的类,用于一些彼此关系不大的类,并易于扩展,以便于面对将来会出现的类。
    需要一个统一的输出接口,但是输入类型却不可预知。

     

    类适配器模式示例分析

    使用情景:当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器C来进行中转,这个适配器C要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法,然后再继承接口B实现类B1,这样我们可以在适配器C中访问接口B的方法了,这时我们在适配器C中的接口A方法中直接引用B1中的合适方法,这样就完成了一个简单的类适配器。

    以ps2与usb的转接为例

    ps2接口:Ps2

    1 public interface Ps2 {
    2     void isPs2();
    3 }

    USB接口:Usb

    1 public interface Usb {
    2     void isUsb();
    3 }

    USB接口实现类:Usber

    public class Usber implements Usb {
         @Override
        public void isUsb() {
             System.out.println("USB口");
         }
     
     } 

    适配器:Adapter

    public class Adapter extends Usber implements Ps2 {
    
         @Override
         public void isPs2() {
             isUsb();
         }
     
     }

    测试类:Clienter

    1 public class Clienter {
    2 
    3     public static void main(String[] args) {
    4         Ps2 p = new Adapter(new Usber());
    5         p.isPs2();
    6     }
    7 
    8 }

    结果显示:

    USB口

    实例讲解:

      我有个ps2插头的设备,但是主机上只有适配usb插头的接口,所以要找个转换器,将ps2插头转换成为USB插头就可以让主机访问到ps2设备了。

      接口Ps2:描述ps2接口格式

      接口Usb:描述USB接口格式

      类Usber:是接口Usb的实现类,是具体的USB接口格式

      Adapter:用于将ps2接口格式转换成为USB接口格式

    参考链接:https://www.cnblogs.com/V1haoge/p/6479118.html

  • 相关阅读:
    AQS共享锁应用之Semaphore原理
    AQS与重入锁ReetrantLock原理
    2018第23周总结
    阅读思考——被误用的敏捷和阻碍程序员成长的坏习惯
    百度云盘下载工具
    线程中断总结
    JUC包中的锁框架
    Java并发实现线程阻塞原语LockSupport
    react的类型检查PropTypes自React v15.5起已弃用,请使用prop-types
    python性能优化、内存优化、内存泄露;与其他语音比较效率如何?
  • 原文地址:https://www.cnblogs.com/lucky1024/p/11549578.html
Copyright © 2020-2023  润新知