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.  

  • 相关阅读:
    sabaki and leelazero
    apply current folder view to all folders
    string operation in powershell
    wirte function in powershell
    add environment path to powershell
    Module in powershell
    sql prompt
    vmware中鼠标在部分区域不能使用
    调整多个控件的dock的顺序
    行为型模型 策略模式
  • 原文地址:https://www.cnblogs.com/juddy/p/14970061.html
Copyright © 2011-2022 走看看