美文网首页
结构型模式之适配器模式

结构型模式之适配器模式

作者: sunpy | 来源:发表于2018-10-22 12:50 被阅读6次

介绍

什么是适配器模式?从“适配”这个词上理解,就是把原来两个不能一起工作的东西可以一起工作。而适配器模式就是使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。

类适配器

  1. 源角色
public class MySourceRole {
    
    public void method1() {
        System.out.println("method1");
    }
}
  1. 目标接口
public interface ITarget {
    
    public void method1();
    
    public void method2();
}
  1. 适配器角色
public class MyAdapter extends MySourceRole implements ITarget {

    @Override
    public void method1() {
        super.method1();
    }

    @Override
    public void method2() {
        System.out.println("method2");
    }
}

测试:

public static void main(String[] args) {
    ITarget target = new MyAdapter();
    target.method1();
    target.method2();
}

说明:目标接口通过适配器继承源角色获取了method1功能,适配器本身实现了method2功能,并且又兼容了method1功能。可以看出类适配的原理就是为目标接口创建适配器,让适配器实现目标接口,继承源角色。

对象适配器

  1. 源角色
public class MySourceRole {
    
    public void method1() {
        System.out.println("method1");
    }
}
  1. 目标接口
public interface ITarget {
    
    public void method1();
    
    public void method2();
}
  1. 适配器角色
public class MyAdapter implements ITarget {

    private MySourceRole mySourceRole;
    
    public MyAdapter(MySourceRole mySourceRole) {
        this.mySourceRole = mySourceRole;
    }
    
    @Override
    public void method2() {
        System.out.println("method2");
    }

    @Override
    public void method1() {
        mySourceRole.method1();
    }
}

测试:

public static void main(String[] args) {
    ITarget target = new MyAdapter(new MySourceRole());
    target.method1();
    target.method2();
}

说明:适配器是通过构造器方式传入源角色,进而使用源角色的引用实现了method1的功能;其本身实现了method2的功能且兼容了method1的功能。可以发现method1的功能是适配器在出生(初始化)时就赋予的能力!

类适配器 vs 对象适配器

区别:类适配器在兼容源角色的策略采用继承方式,通过继承父类从而实现新功能。对象适配器在兼容源角色的策略采用组合+构造器初始化方式,通过传入源角色的引用从而实现新功能。

实际应用的设计

适配器在转换流InputStreamReader的应用:

public static void main(String[] args) throws IOException {
    Reader reader = new InputStreamReader(System.in);
    char[] arr = new char[1024];
    int len = 0;
        
    while ((len = reader.read(arr)) != -1) {
        System.out.println(new String(arr, 0 , len));
    }
        
    reader.close();
}

① 目标类Reader ② 源角色InputStream ③ 适配器InputStreamReader
InputStreamReader适配器将InputStream输入流转换为Reader字符流。InputStream和Reader提供都是正确的,但是与目标接口Reader不符合,就需要使用适配器InputStreamReader,让InputStream适配Reader。

总结

  1. 类的适配器:将一个类(原类)转成满足另一个接口(目标接口)的新类(适配器类),就创建一个适配器类实现目标接口,继承原类。
  2. 对象的适配器:将一个对象(原对象)转成满足新接口(目标接口)的新对象(适配器对象),就使新对象持有原对象,将原对象作为属性,通过原对象调用原对象的方法。

相关文章

  • 23种设计模式

    创建型 工厂模式 ( 工厂方法模式, 抽象工厂模式, 建造者模式 ) 单例模式 原型模式 结构型 适配器模式 装饰...

  • 设计模式分类汇总

    结构型 适配器模式 组合模式 桥接模式 代理模式 装饰者模式 门面模式 享元模式 行为型 责任链模式 命令模式 解...

  • 前篇

    一、常见的设计模式? 创建型:工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式 结构型:适配器模式、桥接...

  • JavaScript设计模式

    设计模式分类(23种设计模式) 创建型单例模式原型模式工厂模式抽象工厂模式建造者模式 结构型适配器模式装饰器模式代...

  • 结构型模式:适配器模式

    文章首发:结构型模式:适配器模式 七大结构型模式之一:适配器模式。 简介 姓名 :适配器模式 英文名 :Adapt...

  • [Python-设计模式] 结构型模式- 适配器模式

    适配器模式 适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。 适配器模式结构 对象适配器 实...

  • java23种设计模式

    创建型 抽象工厂模式工厂方法建造者模式原型模式单态模式 结构型 适配器模式桥接模式组合模式外观模式装饰者模式享元模...

  • 设计模式之适配器模式

    设计模式之适配器模式 1. 模式定义 适配器模式又称包装器模式,属于结构型模式,它可以将一个接口转换成客户希望的另...

  • 设计模式纲要

    设计模式分3类: 创建型5种: 工厂方法模式,抽象工厂模式,单例模式,原型模式,建造者模式 结构型7种: 适配器模...

  • 最常用的设计模式---适配器模式(C++实现)

    适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适...

网友评论

      本文标题:结构型模式之适配器模式

      本文链接:https://www.haomeiwen.com/subject/nppwzftx.html