• GOF23设计模式之适配器模式(Adapter)


    一、适配器模式概述

      将一个类的接口转换成客户可用的另外一个接口。

      将原本不兼容不能在一起工作的类添加适配处理类,使其可以在一起工作。

    二、适配器模式场景

      要想只有USB接口的电脑想使用PS/2接口的键盘,必须使用PS/2转USB的适配器。

    三、适配器模式示例

      (1)定义USB接口

     1 /**
     2  * 客户所期待的接口(相当于USB接口)
     3  * @author CL
     4  *
     5  */
     6 public interface Target {
     7     
     8     void handleReq();
     9 
    10 }

      (2)定义PS/2键盘

     1 /**
     2  * 被适配的类 (相当于例子中的PS/2键盘)
     3  * @author CL
     4  *
     5  */
     6 public class Adaptee {
     7     
     8     public void request() {
     9         System.out.println("我是PS/2接口的键盘!");
    10     }
    11 
    12 }

      (3)定义PS/2转USB的适配器

      a. 类适配器

     1 /**
     2  * 适配器(相当于可以将PS/2接口转换成USB接口的适配器本身)
     3  *     类适配器方式
     4  * @author CL
     5  *
     6  */
     7 public class Adapter extends Adaptee implements Target {
     8 
     9     public void handleReq() {
    10         super.request();
    11     }
    12 
    13 }

      测试:

     1 /**
     2  * 客户端类(相当于只能识别USB接口键盘的电脑)
     3  * @author CL
     4  *
     5  */
     6 public class Client {
     7     
     8     public void test(Target t) {
     9         t.handleReq();
    10     }
    11     
    12     public static void main(String[] args) {
    13         Client c = new Client();
    14         Adaptee a = new Adaptee();
    15         
    16         Target t = new Adapter();    //类适配器方式
    17         
    18         c.test(t);
    19     }
    20 
    21 }

      控制台输出:

    我是PS/2接口的键盘!

      b.对象适配器

     1 /**
     2  * 适配器(相当于可以将PS/2接口转换成USB接口的适配器本身)
     3  *         对象适配器方式,使用了组合的方式跟被适配对象整合
     4  * @author CL
     5  *
     6  */
     7 public class Adapter implements Target {
     8     
     9     private Adaptee adaptee;
    10     
    11     public Adapter(Adaptee adaptee) {
    12         this.adaptee = adaptee;
    13     }
    14 
    15     public void handleReq() {
    16         adaptee.request();
    17     }
    18 
    19 }

      测试:

     1 /**
     2  * 客户端类(相当于只能识别USB接口键盘的电脑)
     3  * @author CL
     4  *
     5  */
     6 public class Client {
     7     
     8     public void test(Target t) {
     9         t.handleReq();
    10     }
    11     
    12     public static void main(String[] args) {
    13         Client c = new Client();
    14         Adaptee a = new Adaptee();
    15         
    16         Target t = new Adapter3();    //类适配器方式
    17         
    18         c.test(t);
    19     }
    20 
    21 }

      控制台输出:

    我是PS/2接口的键盘!
  • 相关阅读:
    oracle 如何查看oracle数据库版本
    oracle 拼接字符串的两种方式
    ibatis 批量更新(二)
    ibatis中#和$如何当作字符使用?
    SVM核技巧的经典解释
    Koch 分形,海岸线,雪花
    Java程序猿笔试面试之String
    一步一步在Windows下搭建React Native Android开发环境
    IOS是否在项目中存在,所使用的反射那点事
    图的深度搜索和广度搜索
  • 原文地址:https://www.cnblogs.com/cao-lei/p/8297918.html
Copyright © 2020-2023  润新知