• 适配器模式


    适配器模式是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。

    适配器模式:类的适配器模式,对象的适配器模式

    1,类的适配器模式

    类的适配器模式把被适配的类的api转换成为目标类的api

    目标角色:这既是所期待得到的接口,注意,由于这里讨论的是类适配器模式,因此目标不可以是类

    源角色:现有需要适配的接口

    适配器角色:适配器把源接口转换成目标接口


    public class Adaptee
    {
         public void operation1(){}
    }
    public interface Target
    {
      public abstract void operator1();
      public abstract void operator2();
    }
    public class Adapter extends Adaptee implements Target
    {
        public void operator2()
        {
            System.out.println("adaptee operator2!");
        }
    }
    public class Client
    {
        public static void main(String[] args)
        {
            Target target=new Adapter();
            target.operator1();
            target.operator2();
        }
    }

    使用一个具体类把源适配到目标中,这样一来,如果源以及源的子类都使用此类适配,就行不通了,由于适配器类是源的子类,因此可以在适配器类中置换掉源的一些方法,由于只引进了一个适配器类,因此只有一个路线到达目标类,使问题得到简化。

    2,对象的适配器模式

    对象的适配器模式把源类的api转换成为目标类的api,与类的适配器模式不同的是,对象的适配器模式不是使用基础关系链接到源类,而是使用委派关系链接到源类。

    目标角色:这就是所期待的接口,目标可以是具体的或抽象的类

    源角色:现在需要适配的接口

    适配器角色:把源接口转换成目标接口。


    public interface Target
    {
      public abstract void sampleOperation1();
      public abstract void sampleOperation2();
    }

    public class AdapteeTwo
    {
      public void sampleOperation1(){}
    }

    public class Adapter implements Target
    {
        private Adaptee adaptee;
        public Adapter(Adaptee adaptee)
        {
            super();
            this.adaptee=adaptee;
        }
        public void sampleOperation1()
        {
            adaptee.sampleOperation1();
        }
        public void sampleOperation2()
        {
            System.out.println("自己的操作!");
        }
    }

    适配器模式的用意是将接口不同而功能相同或者相近的两个接口加以转换,这里面包括适配器角色补充了一个源角色没有的办法。

  • 相关阅读:
    如何学习一项新技术呢?
    开发人员如何构建自己的学习笔记系统
    Stream流之List、Integer[]、int[]相互转化
    图解LinkedHashMap原理
    java 手动实现单链表(尾插法和头插法)
    为什么你学不会递归?刷题几个月,告别递归,谈谈我的经验
    谈谈限流算法的几种实现
    使用LinkedHashMap实现一个简易的LRU缓存
    Java深拷贝和浅拷贝
    Excel两列求差集和并集的实现
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1933735.html
Copyright © 2020-2023  润新知