• 设计模式07 适配器模式


    左图是:对象结构型适配器模式;右图是:类结构型适配器模式。常用的是第一种方式。

    对象结构型适配器模式与代理模式的UML类图比较接近,对比的看一下:

    左图是:对象结构型适配器模式;右图是:代理模式。

    适配器模式(Adapter)定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

    适配器模式的优点有:

    1、客户端通过适配器可以透明地调用目标接口。

    2、复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。

    3、将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。

    目标对象(被适配的对象):

    1 public class Adaptee {
    2     public void specificRequest() {
    3         System.out.println("原组件执行");
    4     }
    5 }

    对象结构适配器:

     1 public interface Target {
     2     public void request();
     3 }
     4 
     5 public class Adapter implements Target {
     6     private Adaptee adaptee;
     7 
     8     public Adapter(Adaptee adaptee) {
     9         this.adaptee = adaptee;
    10     }
    11 
    12     @Override
    13     public void request() {
    14         // TODO Auto-generated method stub
    15         adaptee.specificRequest();
    16     }
    17 }

    类结构适配器:

    1 public class ClassAdapter extends Adaptee implements Target {
    2     @Override
    3     public void request() {
    4         // TODO Auto-generated method stub
    5         specificRequest();
    6     }
    7 }

    调用方式:

     1 public class Client {
     2     public static void main(String[] args) {
     3         //类适配器
     4         Target target = new ClassAdapter();
     5         target.request();
     6         
     7         System.out.println("----------------");
     8         //被调用的目标对象
     9         Adaptee adaptee = new Adaptee();
    10         
    11         //适配器,左侧和右侧分别是两个“螺丝扣”
    12         Target adapter = new Adapter(adaptee);
    13         
    14         //信息通过adapter传输
    15         adapter.request();
    16     }
    17 }

    执行结果:

    通过调用适配器(Adapter)的request()方法,完成了对被适配对象(Adaptee)的specificRequest()方法的执行。

  • 相关阅读:
    Luogu4233 射命丸文的笔记 DP、多项式求逆
    LOJ2267 SDOI2017 龙与地下城 FFT、概率密度函数、Simpson
    LOJ2882 JOISC2014 两个人的星座 计算几何
    UOJ343 清华集训2017 避难所 构造、打表
    Solution -「CTS2019」珍珠
    「珂朵莉树」学习笔记
    CSP2019-J/S 游记
    LeetCode(164)Maximum Gap
    LeetCode(165) Compare Version Numbers
    LeetCode(162) Find Peak Element
  • 原文地址:https://www.cnblogs.com/asenyang/p/12111037.html
Copyright © 2020-2023  润新知