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

    设计模式之适配器模式
    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到Web开发
    源码安装缺少configure文件
    5
    4
    3
    2
    42
    1
    18
    41
  • 原文地址:https://www.cnblogs.com/juddy/p/14970061.html
Copyright © 2011-2022 走看看