设计模式-适配器模式(adapter)

对于adapter模式一般理解为 将两种不同的接口定义进行转换

例如:java字节流和字符流之间转换

/*
 * Copyright (c) 2020, guoxing, Co,. Ltd. All Rights Reserved
 */
package com.xingguo.io.characterstream;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

/**
 * InputStreamToReaderDemo
 *
 * @author guoxing
 * @date 2020/12/5 2:33 PM
 * @since
 */
public class InputStreamToReaderDemo {

    public static void main(String[] args) {
        InputStream in = System.in;
        // 适配器模式
        // 对于适配器模式 (IN 类型,OUT类型), 需要注入IN类型数据,并输出OUT类型数据
        // 适配对象属于OUT类型数据,注入的是IN类型数据,且对于OUT和IN类型没有任何层次关系
        InputStreamReader inputStreamReader = new InputStreamReader(in, StandardCharsets.UTF_8);

    }
}

 

关于适配器模式存在以下几种使用场景

  1.  类适配器
  2. 对象适配器
  3. 接口适配器

 

关于类适配器

其原理是通过继承来实现;

对于继承的理解为,存在A,B两个接口,AL实现了A接口,适配器通过继承AL类以及实现B接口的方式,从而实现将 A接口的规范转换为B接口的规范搭配适配器的目的;

 

关于对象适配器

原理是通过组合的方式将要适配的接口对象(具体实现)进行注入,实现转换;

对于组合的理解为,存在A,B两个接口,适配器通过实现B接口,并将A接口设置为对象属性,提供有参构造器,对于适配器中重写的B接口方法,内部通过A接口对象实现 将A接口规范转换为B接口规范;

 

对于类适配器和对象适配器的区别在于 对于类适配器其需要继承具体的类具有一定的局限性;而对于对象适配器,由于在对象适配器中将接口作为对象属性,利用面向接口编程特征,其并不局限于单一的实现,可以实现类似于多态的特性

 

关于接口适配器

原理是通过使用抽象类实现接口,而对于具体的实现类通过继承抽象类,有选择的进行重写实现(类似于 Filter (过滤器模式)); 

 

posted @ 2020-12-05 14:41  郭星  阅读(199)  评论(0)    收藏  举报