设计模式之适配器模式

设计模式之适配器模式
  1. 适配器模式基本介绍

    1. 基本介绍

      1. 适配器模式(Adapter Pattern)将某个类 接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能在一起工作的两个类可以协同工作。其别名为包装器

      2. 适配器模式属于结构型模式

      3. 主要分为3类:类适配器模式、对象适配器模式、接口适配器模式

    2. 适配器模式工作原理

      1. 适配器模式:将一个类非接口转化成另一个接口。让原本接口不兼容的类可以兼容

      2. 从用户的角度看不到被适配者,是解耦的

      3. 用户调用适配器转化出来的目标接口方法,适配器在调用被适配者的相关接口方法

      4. 用户收到反馈结果,感觉只是和目标接口交互,并不会感觉到中间有适配器

    3. 类适配器

      1. 基本介绍

        1. Adapter类,通过继承src类,实现dst类,完成src->dst的适配

      2. 类适配器应用案例

        1. 生活中的充电器为例,充电器本身相当于Adapter,220交流电相当于src(即被适配者),目标dst是5V直流电

      3. 代码

        //编写被适配者
        public class Voltage220V{
           //输出220V电压
           public int output220V(){
               int src = 220;
               System.out.println("电压="+src+"V");
               return src;
          }
        }

        //编写一个接口,有一个输出5V的抽象方法
        public interface IVoltage5V{
           public abstract int output5V();
        }

        //编写一个类,作用可以将220V电压转换成5V
        public class VoltageAdapter extends Voltage220V implements IVoltage5V{
           @Override
           public int output5V(){
               //先拿到220V电压
               int srcV=output220V();
               int dst = srcV / 44;
               return dst;
          }
        }

        //编写一个手机类,给手机充电
        public class Phone{
           //充电方法
           public void charming(IVoltage5V iVoltage5V){
               if(iVoltage5V.ouotput5V == 5){
                   System.out.println("电压正常可以正常充电")
              }
          }
        }
        //编写一个客户端
        public class Client{
           public static void main(String[] args){
               Phone phone = new Phone();
              phone.charming(new VoltageAdapter());
          }
        }

         

      4. 类适配器类图

        设计模式之适配器模式

         

         

      5. 类适配器的注意事项和细节

        1. java是单继承机制,所以类适配器需要继承src类这个算是一个缺点,因为这就要求dst必须是一个接口,有一定的局限性

        2. src的方法在adapter中都会暴露出来,也增加了使用成本

        3. 由于其继承了src类,所以他可以根据需求重写src方法,使得adapter的灵活性增强了

    4. 对象适配器模式

      1. 基本介绍

        1. 基本思路和类的适配器模式基本相同,只是将adapter类做修改,不是继承src类,而是持有src类的实例,以解决兼容性的问题。即:持有src类,实现dst接口,完成src--->dst的适配

        2. 根据合成复用原则,在系统中尽量使用关联关系来代替继承关系

        3. 对象适配器模式是适配器模式中常用的一种

      2. 通过对象适配器改进类适配器中的案例代码

        //编写被适配者
        public class Voltage220V{
           //输出220V电压
           public int output220V(){
               int src = 220;
               System.out.println("电压="+src+"V");
               return src;
          }
        }

        //编写一个接口,有一个输出5V的抽象方法
        public interface IVoltage5V{
           public abstract int output5V();
        }

        //编写一个类,作用可以将220V电压转换成5V
        public class VoltageAdapter implements IVoltage5V{
           private Voltage220V voltage220V;//聚合
           //创建一个构造器
           public VoltageAdapter(Voltage220V voltage220V){
               super();
               this.voltage220V=voltage220V;
          }
           @Override
           public int output5V(){
        int dst = 0;
               if(null != voltage220V){
                   int src = voltage220V.output220V();
                   dst = src / 44;
                   System.oout.println("适配后的电压="+dst)
              }
               return dst;
          }
        }

        //编写一个手机类,给手机充电
        public class Phone{
           //充电方法
           public void charming(IVoltage5V iVoltage5V){
               if(iVoltage5V.ouotput5V == 5){
                   System.out.println("电压正常可以正常充电")
              }
          }
        }
        //编写一个客户端
        public class Client{
           public static void main(String[] args){
               Phone phone = new Phone();
              phone.charming(new VoltageAdapter(new Voltage220V()));
          }
        }

         

      3. 接口适配器模式类图

        设计模式之适配器模式

         

         

      4. 对象适配器模式注意事项和细节

        1. 对象适配器和;类适配器其实是同一种思想,只是实现方式不同而已,根据合成复用原则,使用组合代替继承,所以他解决了类适配器必须继承src的局限性问题,也不再要求dst必须是接口

        2. 使用成本更低,更加灵活

    5. 接口适配器模式

      1. 基本介绍

        1. 一些书籍中称为:适配器模式或者缺省适配器模式

        2. 当不需要全部实现接口提供的方法时,可以设计一个抽闲类实现接口,并为该接口中的每一个方法提供一个默认实现(空方法),那么该抽象类的子类可以有选择的覆盖父类的某些方法来实现需求

        3. 使用于一个接口不想使用其所有方法的情况

      2. 适配器模式在SpringMVC框架应用的解析

        1. SpringMVC中HandleAdapter,就使用了适配器模式

    6. 适配器模式注意事项和细节

      1. 三种命名方式,是根据src是以怎样的形式给到Adapter来命名的

      2. 详解

        1. 类适配器:以类给到,在Adapter里,就是将src当做类。继承

        2. 对象适配器:以对象给到,在Adapter里,将Src作为对象,持有

        3. 接口适配器:以接口给到,在Adapter里,将src作为一个接口,实现

      3. Adapter最大的作用还是将原本不兼容的接口融合在一起工作

      4. 在实际开发,并不局限上面说的三种方式

      5.  

上一篇:Python_10分钟学会图像平滑操作_专栏No.7


下一篇:26_线段的绘制