zoukankan      html  css  js  c++  java
  • JAVA基础—适配器设计模式

    适配器概念

    在计算机编程中,适配器模式将一个类的接口适配成用户所期待的。使用适配器,可以使接口不兼容而无法在一起工作的类协调工作,做法是将类自己包裹在一个已经存在的类中。

    JDK对适配器设计模式的应用

    InputStreamReader(InputStream in) 
              创建一个使用默认字符集的 InputStreamReader。

    并且InputStreamReader继承了Reader(字符流)

    所以:InputStreamReader 类本身采用了适配器设计模式,把InputStream(字节流)类型转换为Reader类型(将字节流转换为字符流)。使得程序能够对传过来的InputStream 一个字符一个字符的进行操作

        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("D:\text.txt"),"UTF-8");
        char c = (char) inputStreamReader.read();

    假设InputStreamReader的read()方法从输入流中读取的字符为"好",read()方法实际上执行了以下步骤。

    1)从输入流中读取三个字节:229、165和189,这三个字节代表"好"的UTF-8编码。

    2)计算出字符"好"的Unicode编码为89和125

    3)为"好"分配两个字节的内存空间,这两个字节的取值分别为89和125.为提供读的操作效率,可以用BufferReader来装饰InputStreamReader。

    ByteArrayInputStream(byte[] buf) 
              创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。

    并且ByteArrayInputStream 继承了InputStream。 

    所以:ByteArrayInputStream 采用了适配器设计模式,把字节数组转换为输入流类型,使得程序能够对字节数组进行读操作

    构造方法 public ByteArrayInputStream(byte[] buf,int offset,int length) 参数buff指定字节数组类型的数据源,参数offset指定从数组中开始读数据的起始下标位置,length指定从数组中读取的字节数

         byte[] buff = new byte[]{1,2,3,4,-1};
            ByteArrayInputStream bin = new ByteArrayInputStream(buff,3,4);
            int data = bin.read();
            while(-1!=data){
                System.out.println(data);
                data = bin.read();
            }
            bin.close();

    打印结果是4 255(-1的二进制表示形式是11111111所以打印出来255)


    SpringMVC的HandlerAdapter接口就有SpringMVC默认提供了几个适配器类供我们选择

    AbstractHandlerMethodAdapterAnnotationMethodHandlerAdapterHttpRequestHandlerAdapterRequestMappingHandlerAdapterSimpleControllerHandlerAdapterSimpleServletHandlerAdapter

    这是一篇模拟SpringMVC适配器的实现

  • 相关阅读:
    五种Sublime text 3同时快速编辑多行内容
    update 更新某个字段自动加1
    oracle 一行记录被锁
    事件
    练习题1
    语法
    开始js
    js简述
    概述
    软连接
  • 原文地址:https://www.cnblogs.com/ssskkk/p/9315679.html
Copyright © 2011-2022 走看看